Copy disabled (too large)
Download .txt
Showing preview only (37,091K chars total). Download the full file to get everything.
Repository: awslabs/mcp
Branch: main
Commit: 6fda1e9eeef2
Files: 3393
Total size: 34.7 MB
Directory structure:
gitextract_w282c33h/
├── .devcontainer/
│ └── devcontainer.json
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── documentation.yml
│ │ ├── feature_request.yml
│ │ ├── rfc.yml
│ │ └── support_awslabs_mcp_servers.yml
│ ├── SECURITY
│ ├── SUPPORT
│ ├── actions/
│ │ ├── build-and-push-container-image/
│ │ │ └── action.yml
│ │ └── clear-space-ubuntu-latest-agressively/
│ │ └── action.yml
│ ├── codecov.yml
│ ├── dependabot.yml
│ ├── pull_request_template.md
│ └── workflows/
│ ├── RELEASE_INSTRUCTIONS.md
│ ├── 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-slash.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-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
├── .vex/
│ └── CVE-2023-45853.openvex.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── DESIGN_GUIDELINES.md
├── DEVELOPER_GUIDE.md
├── LICENSE
├── NOTICE
├── README.md
├── VIBE_CODING_TIPS_TRICKS.md
├── docs/
│ ├── migration-bedrock-data-automation.md
│ ├── migration-ccapi.md
│ ├── migration-cfn.md
│ ├── migration-cloudwatch-appsignals.md
│ ├── migration-core.md
│ ├── migration-cost-explorer.md
│ ├── migration-diagram.md
│ ├── migration-git-repo-research.md
│ ├── migration-nova-canvas.md
│ └── migration-terraform.md
├── docusaurus/
│ ├── .gitignore
│ ├── README.md
│ ├── 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-kendra-index-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-iac-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-network-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-applicationsignals-mcp-server.md
│ │ │ ├── cloudwatch-mcp-server.md
│ │ │ ├── code-doc-gen-mcp-server.md
│ │ │ ├── core-mcp-server.md
│ │ │ ├── cost-explorer-mcp-server.md
│ │ │ ├── document-loader-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
│ │ │ ├── healthimaging-mcp-server.md
│ │ │ ├── healthlake-mcp-server.md
│ │ │ ├── iam-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
│ │ │ ├── sagemaker-ai-mcp-server.md
│ │ │ ├── sagemaker-unified-studio-spark-troubleshooting-mcp-server.md
│ │ │ ├── sagemaker-unified-studio-spark-upgrade-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.json
│ ├── 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/
│ │ └── server-cards.json
│ └── tsconfig.json
├── samples/
│ ├── README.md
│ ├── mcp-integration-with-kb/
│ │ ├── .python-version
│ │ ├── README.md
│ │ ├── clients/
│ │ │ └── client_server.py
│ │ ├── pyproject.toml
│ │ └── user_interfaces/
│ │ └── chat_bedrock_st.py
│ ├── mcp-integration-with-nova-canvas/
│ │ ├── .python-version
│ │ ├── README.md
│ │ ├── clients/
│ │ │ └── client_server.py
│ │ ├── pyproject.toml
│ │ └── user_interfaces/
│ │ └── image_generator_st.py
│ └── 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_awslabs_init.py
│ ├── verify_package_name.py
│ └── verify_tool_names.py
├── src/
│ ├── amazon-bedrock-agentcore-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── SECURITY.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── amazon_bedrock_agentcore_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── config.py
│ │ │ ├── server.py
│ │ │ ├── tools/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── browser/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── browser_client.py
│ │ │ │ │ ├── connection_manager.py
│ │ │ │ │ ├── error_handler.py
│ │ │ │ │ ├── interaction.py
│ │ │ │ │ ├── management.py
│ │ │ │ │ ├── models.py
│ │ │ │ │ ├── navigation.py
│ │ │ │ │ ├── observation.py
│ │ │ │ │ ├── session.py
│ │ │ │ │ └── snapshot_manager.py
│ │ │ │ ├── docs.py
│ │ │ │ ├── gateway.py
│ │ │ │ ├── memory.py
│ │ │ │ └── runtime.py
│ │ │ └── utils/
│ │ │ ├── __init__.py
│ │ │ ├── cache.py
│ │ │ ├── doc_fetcher.py
│ │ │ ├── indexer.py
│ │ │ ├── text_processor.py
│ │ │ └── url_validator.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── __init__.py
│ │ │ ├── browser/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── conftest.py
│ │ │ │ ├── test_integ_browser_session.py
│ │ │ │ ├── test_integ_mcp_protocol.py
│ │ │ │ ├── test_unit_browser_client.py
│ │ │ │ ├── test_unit_connection.py
│ │ │ │ ├── test_unit_error_handler.py
│ │ │ │ ├── test_unit_interaction.py
│ │ │ │ ├── test_unit_management.py
│ │ │ │ ├── test_unit_server_integration.py
│ │ │ │ ├── test_unit_session.py
│ │ │ │ └── test_unit_snapshot.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_tools.py
│ │ │ └── test_url_validator.py
│ │ └── uv-requirements.txt
│ ├── amazon-kendra-index-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── amazon_kendra_index_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── server.py
│ │ │ └── util.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── test_init.py
│ │ │ ├── test_main.py
│ │ │ └── test_server.py
│ │ └── uv-requirements.txt
│ ├── amazon-keyspaces-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── amazon_keyspaces_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── client.py
│ │ │ ├── config.py
│ │ │ ├── consts.py
│ │ │ ├── llm_context.py
│ │ │ ├── models.py
│ │ │ ├── server.py
│ │ │ └── services.py
│ │ ├── pyproject.toml
│ │ ├── 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
│ ├── amazon-mq-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── 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
│ │ ├── docker-healthcheck.sh
│ │ ├── example/
│ │ │ └── sample_mcp_q_cli.json
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── .gitignore
│ │ │ ├── __init__.py
│ │ │ ├── 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
│ ├── amazon-neptune-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── amazon_neptune_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── constants.py
│ │ │ ├── exceptions.py
│ │ │ ├── graph_store/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── analytics.py
│ │ │ │ ├── base.py
│ │ │ │ └── database.py
│ │ │ ├── models.py
│ │ │ ├── neptune.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── 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
│ ├── amazon-qbusiness-anonymous-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── amazon_qbusiness_anonymous_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── clients.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── __init__.py
│ │ │ ├── conftest.py
│ │ │ ├── test_init.py
│ │ │ ├── test_main.py
│ │ │ └── test_server.py
│ │ └── uv-requirements.txt
│ ├── amazon-qindex-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── amazon_qindex_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── clients.py
│ │ │ └── server.py
│ │ ├── pyproject.toml
│ │ └── tests/
│ │ ├── test_clients.py
│ │ ├── test_init.py
│ │ ├── test_main.py
│ │ └── test_server.py
│ ├── amazon-sns-sqs-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── amazon_sns_sqs_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── common.py
│ │ │ ├── consts.py
│ │ │ ├── generator.py
│ │ │ ├── server.py
│ │ │ ├── sns.py
│ │ │ └── sqs.py
│ │ ├── docker-healthcheck.sh
│ │ ├── print_tools.py
│ │ ├── pyproject.toml
│ │ ├── run_tests.sh
│ │ ├── tests/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── test_common.py
│ │ │ ├── test_generator.py
│ │ │ ├── test_server.py
│ │ │ ├── test_sns.py
│ │ │ └── test_sqs.py
│ │ └── uv-requirements.txt
│ ├── aurora-dsql-mcp-server/
│ │ ├── .dockerignore
│ │ ├── .gitignore
│ │ ├── .pre-commit-config.yaml
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── aurora_dsql_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── consts.py
│ │ │ ├── mutable_sql_detector.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── kiro_power/
│ │ │ ├── POWER.md
│ │ │ ├── mcp.json
│ │ │ └── steering/
│ │ │ ├── access-control.md
│ │ │ ├── ddl-migrations.md
│ │ │ ├── development-guide.md
│ │ │ ├── dsql-examples.md
│ │ │ ├── language.md
│ │ │ ├── mcp-setup.md
│ │ │ ├── mysql-to-dsql-migrations.md
│ │ │ ├── onboarding.md
│ │ │ └── troubleshooting.md
│ │ ├── pyproject.toml
│ │ ├── skills/
│ │ │ ├── README.md
│ │ │ ├── amazon-aurora-dsql-skill/
│ │ │ │ └── SKILL.md
│ │ │ ├── aurora-dsql-skill/
│ │ │ │ └── SKILL.md
│ │ │ ├── aws-dsql-skill/
│ │ │ │ └── SKILL.md
│ │ │ ├── claude_skill_setup.md
│ │ │ ├── distributed-postgres-skill/
│ │ │ │ └── SKILL.md
│ │ │ ├── distributed-sql-skill/
│ │ │ │ └── SKILL.md
│ │ │ └── dsql-skill/
│ │ │ ├── SKILL.md
│ │ │ ├── mcp/
│ │ │ │ ├── .mcp.json
│ │ │ │ ├── mcp-setup.md
│ │ │ │ └── mcp-tools.md
│ │ │ ├── references/
│ │ │ │ ├── access-control.md
│ │ │ │ ├── ddl-migrations.md
│ │ │ │ ├── development-guide.md
│ │ │ │ ├── dsql-examples.md
│ │ │ │ ├── language.md
│ │ │ │ ├── mysql-to-dsql-migrations.md
│ │ │ │ ├── onboarding.md
│ │ │ │ └── troubleshooting.md
│ │ │ └── scripts/
│ │ │ ├── README.md
│ │ │ ├── cluster-info.sh
│ │ │ ├── create-cluster.sh
│ │ │ ├── delete-cluster.sh
│ │ │ ├── list-clusters.sh
│ │ │ ├── loader.sh
│ │ │ └── psql-connect.sh
│ │ ├── test_tools.md
│ │ ├── tests/
│ │ │ ├── test_connection_reuse.py
│ │ │ ├── test_error_paths.py
│ │ │ ├── test_graceful_startup.py
│ │ │ ├── test_init.py
│ │ │ ├── test_main.py
│ │ │ ├── test_profile_option.py
│ │ │ ├── test_proxy_tools.py
│ │ │ ├── test_readonly_enforcement.py
│ │ │ └── test_server.py
│ │ └── uv-requirements.txt
│ ├── aws-api-mcp-server/
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── CONTRIBUTING.md
│ │ ├── DEPLOYMENT.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── 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.py
│ │ │ │ │ ├── command_metadata.py
│ │ │ │ │ ├── config.py
│ │ │ │ │ ├── errors.py
│ │ │ │ │ ├── file_system_controls.py
│ │ │ │ │ ├── help_command.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
│ │ │ │ │ │ ├── s3_express_one_validator.py
│ │ │ │ │ │ └── ssm_validator.py
│ │ │ │ │ ├── interpretation.py
│ │ │ │ │ ├── lexer.py
│ │ │ │ │ └── parser.py
│ │ │ │ ├── py.typed
│ │ │ │ └── security/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── aws_api_customization.json
│ │ │ │ └── policy.py
│ │ │ ├── middleware/
│ │ │ │ ├── __init__.py
│ │ │ │ └── http_header_validation_middleware.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── 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_regions.py
│ │ │ │ ├── test_service.py
│ │ │ │ └── test_services.py
│ │ │ ├── common/
│ │ │ │ ├── test_command.py
│ │ │ │ ├── test_config.py
│ │ │ │ ├── test_file_system_controls.py
│ │ │ │ ├── test_help_command.py
│ │ │ │ ├── test_helpers.py
│ │ │ │ └── test_models.py
│ │ │ ├── fixtures.py
│ │ │ ├── history_handler.py
│ │ │ ├── metadata/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_read_only_operations_list.py
│ │ │ ├── middleware/
│ │ │ │ └── test_http_header_validation_middleware.py
│ │ │ ├── parser/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_lexer.py
│ │ │ │ ├── test_parser.py
│ │ │ │ ├── test_parser_customizations.py
│ │ │ │ └── test_parser_file_access.py
│ │ │ ├── test_security_policy.py
│ │ │ └── test_server.py
│ │ └── uv-requirements.txt
│ ├── aws-appsync-mcp-server/
│ │ ├── .dockerignore
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── aws_appsync_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── decorators.py
│ │ │ ├── helpers.py
│ │ │ ├── operations/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── create_api.py
│ │ │ │ ├── create_api_cache.py
│ │ │ │ ├── create_api_key.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.py
│ │ │ │ ├── create_api_cache.py
│ │ │ │ ├── create_api_key.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
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── __init__.py
│ │ │ ├── test_all_create_tools_write_protection.py
│ │ │ ├── test_create_api.py
│ │ │ ├── test_create_api_cache.py
│ │ │ ├── test_create_api_key.py
│ │ │ ├── test_create_channel_namespace.py
│ │ │ ├── test_create_datasource.py
│ │ │ ├── test_create_datasource_tool.py
│ │ │ ├── test_create_domain_name.py
│ │ │ ├── test_create_function.py
│ │ │ ├── test_create_graphql_api.py
│ │ │ ├── test_create_resolver.py
│ │ │ ├── test_create_schema.py
│ │ │ ├── test_create_schema_tool.py
│ │ │ ├── test_helpers.py
│ │ │ ├── test_server.py
│ │ │ ├── test_validators.py
│ │ │ └── test_write_operation.py
│ │ └── uv-requirements.txt
│ ├── aws-bedrock-custom-model-import-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── 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
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── 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
│ ├── aws-bedrock-data-automation-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── aws_bedrock_data_automation_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── helpers.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── __init__.py
│ │ │ ├── test_helpers.py
│ │ │ ├── test_init.py
│ │ │ ├── test_main.py
│ │ │ └── test_server.py
│ │ └── uv-requirements.txt
│ ├── aws-dataprocessing-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── 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
│ │ │ │ │ ├── emr_serverless_application_handler.py
│ │ │ │ │ └── emr_serverless_job_run_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
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── 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_custom_tags_emr_serverless.py
│ │ │ │ │ ├── test_emr_ec2_cluster_handler.py
│ │ │ │ │ ├── test_emr_ec2_instance_handler.py
│ │ │ │ │ ├── test_emr_ec2_steps_handler.py
│ │ │ │ │ ├── test_emr_serverless_application_handler.py
│ │ │ │ │ └── test_emr_serverless_job_run_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_data_catalog_models.py
│ │ │ ├── test_init.py
│ │ │ ├── test_server.py
│ │ │ ├── test_utils.py
│ │ │ └── utils/
│ │ │ ├── __init__.py
│ │ │ ├── test_aws_helper.py
│ │ │ ├── test_custom_tags.py
│ │ │ ├── test_logging_helper.py
│ │ │ └── test_sql_analyzer.py
│ │ └── uv-requirements.txt
│ ├── aws-diagram-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── DO_NOT_RELEASE
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── aws_diagram_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── _sandbox_runner.py
│ │ │ ├── diagrams_tools.py
│ │ │ ├── models.py
│ │ │ ├── scanner.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── conftest.py
│ │ │ ├── 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
│ ├── aws-documentation-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── aws_documentation_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── models.py
│ │ │ ├── server.py
│ │ │ ├── server_aws.py
│ │ │ ├── server_aws_cn.py
│ │ │ ├── server_utils.py
│ │ │ └── util.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── 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_read_sections_live.py
│ │ │ ├── test_aws_recommend_live.py
│ │ │ ├── test_aws_search_live.py
│ │ │ ├── test_integ_basic.py
│ │ │ ├── test_metadata_handling.py
│ │ │ ├── test_models.py
│ │ │ ├── test_server.py
│ │ │ ├── test_server_aws.py
│ │ │ ├── test_server_aws_cn.py
│ │ │ ├── test_server_utils.py
│ │ │ └── test_util.py
│ │ └── uv-requirements.txt
│ ├── aws-healthomics-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── MCP_INSPECTOR_SETUP.md
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── aws_healthomics_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── analysis/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── cost_analyzer.py
│ │ │ │ ├── instance_recommender.py
│ │ │ │ ├── pricing_cache.py
│ │ │ │ └── task_aggregator.py
│ │ │ ├── consts.py
│ │ │ ├── models/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── analysis.py
│ │ │ │ ├── core.py
│ │ │ │ ├── ecr.py
│ │ │ │ ├── s3.py
│ │ │ │ ├── search.py
│ │ │ │ └── store.py
│ │ │ ├── search/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── file_association_engine.py
│ │ │ │ ├── file_type_detector.py
│ │ │ │ ├── genomics_search_orchestrator.py
│ │ │ │ ├── healthomics_search_engine.py
│ │ │ │ ├── json_response_builder.py
│ │ │ │ ├── pattern_matcher.py
│ │ │ │ ├── result_ranker.py
│ │ │ │ ├── s3_search_engine.py
│ │ │ │ └── scoring_engine.py
│ │ │ ├── server.py
│ │ │ ├── tools/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── codeconnections.py
│ │ │ │ ├── ecr_tools.py
│ │ │ │ ├── genomics_file_search.py
│ │ │ │ ├── helper_tools.py
│ │ │ │ ├── reference_store_tools.py
│ │ │ │ ├── run_analysis.py
│ │ │ │ ├── run_cache.py
│ │ │ │ ├── run_group.py
│ │ │ │ ├── run_timeline.py
│ │ │ │ ├── sequence_store_tools.py
│ │ │ │ ├── troubleshooting.py
│ │ │ │ ├── workflow_analysis.py
│ │ │ │ ├── workflow_execution.py
│ │ │ │ ├── workflow_linting.py
│ │ │ │ └── workflow_management.py
│ │ │ ├── utils/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── aws_utils.py
│ │ │ │ ├── content_resolver.py
│ │ │ │ ├── ecr_utils.py
│ │ │ │ ├── error_utils.py
│ │ │ │ ├── path_utils.py
│ │ │ │ ├── s3_utils.py
│ │ │ │ ├── search_config.py
│ │ │ │ └── validation_utils.py
│ │ │ └── visualization/
│ │ │ ├── __init__.py
│ │ │ ├── gantt_generator.py
│ │ │ └── svg_builder.py
│ │ ├── docker-healthcheck.sh
│ │ ├── docs/
│ │ │ └── workflow_linting.md
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── INTEGRATION_TESTS_README.md
│ │ │ ├── QUICK_REFERENCE.md
│ │ │ ├── TESTING_FRAMEWORK.md
│ │ │ ├── conftest.py
│ │ │ ├── fixtures/
│ │ │ │ └── genomics_test_data.py
│ │ │ ├── test_adhoc_s3_buckets.py
│ │ │ ├── test_analysis_models.py
│ │ │ ├── test_aws_utils.py
│ │ │ ├── test_clone_container.py
│ │ │ ├── test_codeconnections.py
│ │ │ ├── test_consts.py
│ │ │ ├── test_content_resolver.py
│ │ │ ├── test_content_resolver_security.py
│ │ │ ├── test_cost_analyzer.py
│ │ │ ├── test_create_container_registry_map.py
│ │ │ ├── test_ecr_coverage.py
│ │ │ ├── test_ecr_models.py
│ │ │ ├── test_ecr_tools.py
│ │ │ ├── test_ecr_utils.py
│ │ │ ├── test_error_utils.py
│ │ │ ├── test_file_association_engine.py
│ │ │ ├── test_file_type_detector.py
│ │ │ ├── test_gantt_generator.py
│ │ │ ├── test_genomics_file_search_integration_working.py
│ │ │ ├── test_genomics_search_orchestrator.py
│ │ │ ├── test_healthomics_search_engine.py
│ │ │ ├── test_helper_tools.py
│ │ │ ├── test_helper_tools_resolution.py
│ │ │ ├── test_helpers.py
│ │ │ ├── test_init.py
│ │ │ ├── test_instance_recommender.py
│ │ │ ├── test_integration_framework.py
│ │ │ ├── test_json_response_builder.py
│ │ │ ├── test_main.py
│ │ │ ├── test_models.py
│ │ │ ├── test_package_workflow_output.py
│ │ │ ├── test_pagination.py
│ │ │ ├── test_pattern_matcher.py
│ │ │ ├── test_performance_comparison.py
│ │ │ ├── test_pricing_cache.py
│ │ │ ├── test_pull_through_cache_initiation.py
│ │ │ ├── test_reference_store_tools.py
│ │ │ ├── test_result_ranker.py
│ │ │ ├── test_run_analysis.py
│ │ │ ├── test_run_cache.py
│ │ │ ├── test_run_group.py
│ │ │ ├── test_run_group_models.py
│ │ │ ├── test_run_timeline.py
│ │ │ ├── test_run_timeline_output.py
│ │ │ ├── test_s3_file_model.py
│ │ │ ├── test_s3_search_engine.py
│ │ │ ├── test_s3_utils.py
│ │ │ ├── test_scoring_engine.py
│ │ │ ├── test_search_config.py
│ │ │ ├── test_sequence_store_tools.py
│ │ │ ├── test_server.py
│ │ │ ├── test_store_models.py
│ │ │ ├── test_store_properties.py
│ │ │ ├── test_svg_builder.py
│ │ │ ├── test_task_aggregator.py
│ │ │ ├── test_troubleshooting.py
│ │ │ ├── test_validation_utils.py
│ │ │ ├── test_workflow_analysis.py
│ │ │ ├── test_workflow_execution.py
│ │ │ ├── test_workflow_execution_run_group.py
│ │ │ ├── test_workflow_linting.py
│ │ │ ├── test_workflow_linting_resolution.py
│ │ │ ├── test_workflow_management.py
│ │ │ ├── test_workflow_management_resolution.py
│ │ │ └── test_workflow_tools.py
│ │ └── uv-requirements.txt
│ ├── aws-iac-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── aws_iac_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── client/
│ │ │ │ ├── aws_client.py
│ │ │ │ ├── aws_knowledge_client.py
│ │ │ │ └── mcp_proxy.py
│ │ │ ├── config.py
│ │ │ ├── data/
│ │ │ │ ├── cloudformation_failure_cases.py
│ │ │ │ └── default_guard_rules.guard
│ │ │ ├── knowledge_models.py
│ │ │ ├── sanitizer.py
│ │ │ ├── server.py
│ │ │ └── tools/
│ │ │ ├── cdk_best_practices.py
│ │ │ ├── cloudformation_compliance_checker.py
│ │ │ ├── cloudformation_deployment_troubleshooter.py
│ │ │ ├── cloudformation_pre_deploy_validation.py
│ │ │ ├── cloudformation_validator.py
│ │ │ └── iac_tools.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── __init__.py
│ │ │ ├── client/
│ │ │ │ ├── test_aws_client.py
│ │ │ │ ├── test_aws_knowledge_client.py
│ │ │ │ └── test_mcp_proxy.py
│ │ │ ├── proxy/
│ │ │ │ └── __init__.py
│ │ │ ├── test_sanitizer.py
│ │ │ ├── test_server.py
│ │ │ └── tools/
│ │ │ ├── test_cdk_search_documentation_tool.py
│ │ │ ├── test_cloudformation_compliance_checker.py
│ │ │ ├── test_cloudformation_deployment_troubleshooter.py
│ │ │ ├── test_cloudformation_failure_cases.py
│ │ │ ├── test_cloudformation_pre_deploy_validation.py
│ │ │ ├── test_cloudformation_validator.py
│ │ │ ├── test_search_cdk_samples_and_constructs_tool.py
│ │ │ └── test_search_cloudformation_documentation_tool.py
│ │ └── uv-requirements.txt
│ ├── aws-iot-sitewise-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── DEVELOPMENT.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── aws_iot_sitewise_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── client.py
│ │ │ ├── models/
│ │ │ │ ├── computation_data_models.py
│ │ │ │ └── metadata_transfer_data_models.py
│ │ │ ├── prompts/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── anomaly_detection_workflow.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_computation_models.py
│ │ │ │ ├── sitewise_data.py
│ │ │ │ ├── sitewise_executions.py
│ │ │ │ ├── sitewise_gateways.py
│ │ │ │ ├── sitewise_metadata_transfer.py
│ │ │ │ └── timestamp_tools.py
│ │ │ ├── validation.py
│ │ │ └── validation_utils.py
│ │ ├── docker-healthcheck.sh
│ │ ├── examples/
│ │ │ └── wind_farm_example.py
│ │ ├── pyproject.toml
│ │ ├── run_server.py
│ │ ├── tests/
│ │ │ ├── __init__.py
│ │ │ ├── conftest.py
│ │ │ ├── models/
│ │ │ │ ├── test_computation_data_models.py
│ │ │ │ └── test_metadata_transfer_data_models.py
│ │ │ ├── test_client.py
│ │ │ ├── test_init.py
│ │ │ ├── test_main.py
│ │ │ ├── test_server.py
│ │ │ ├── test_validation.py
│ │ │ ├── test_validation_utils.py
│ │ │ └── tools/
│ │ │ ├── test_sitewise_access.py
│ │ │ ├── test_sitewise_asset_models.py
│ │ │ ├── test_sitewise_assets.py
│ │ │ ├── test_sitewise_computation_models.py
│ │ │ ├── test_sitewise_data.py
│ │ │ ├── test_sitewise_executions.py
│ │ │ ├── test_sitewise_gateways.py
│ │ │ ├── test_sitewise_metadata_transfer.py
│ │ │ └── test_timestamp_tools.py
│ │ └── uv-requirements.txt
│ ├── aws-knowledge-mcp-server/
│ │ └── README.md
│ ├── aws-location-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── aws_location_server/
│ │ │ ├── __init__.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── __init__.py
│ │ │ ├── conftest.py
│ │ │ ├── test_server.py
│ │ │ └── test_server_integration.py
│ │ └── uv-requirements.txt
│ ├── aws-msk-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── 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_topics/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── create_topic.py
│ │ │ │ ├── delete_topic.py
│ │ │ │ └── update_topic.py
│ │ │ ├── mutate_vpc/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── create_vpc_connection.py
│ │ │ │ ├── delete_vpc_connection.py
│ │ │ │ └── reject_client_vpc_connection.py
│ │ │ ├── read_cluster/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── describe_cluster.py
│ │ │ │ ├── describe_cluster_operation.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.py
│ │ │ │ ├── describe_configuration_revision.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_topics/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── describe_topic.py
│ │ │ │ ├── describe_topic_partitions.py
│ │ │ │ └── list_topics.py
│ │ │ ├── read_vpc/
│ │ │ │ ├── __init__.py
│ │ │ │ └── describe_vpc_connection.py
│ │ │ └── static_tools/
│ │ │ ├── __init__.py
│ │ │ └── cluster_best_practices.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── 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_topic.py
│ │ │ ├── test_create_vpc_connection.py
│ │ │ ├── test_delete_topic.py
│ │ │ ├── test_delete_vpc_connection.py
│ │ │ ├── test_describe_cluster.py
│ │ │ ├── test_describe_cluster_operation.py
│ │ │ ├── test_describe_configuration.py
│ │ │ ├── test_describe_configuration_revision.py
│ │ │ ├── test_describe_topic.py
│ │ │ ├── test_describe_topic_partitions.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_topics.py
│ │ │ ├── test_list_vpc_connections.py
│ │ │ ├── test_logs_and_telemetry.py
│ │ │ ├── test_main.py
│ │ │ ├── test_mutate_cluster.py
│ │ │ ├── test_mutate_cluster_init.py
│ │ │ ├── test_mutate_cluster_success_cases.py
│ │ │ ├── test_mutate_config_init.py
│ │ │ ├── test_mutate_topics_init.py
│ │ │ ├── test_mutate_vpc_init.py
│ │ │ ├── test_read_cluster_init.py
│ │ │ ├── test_read_cluster_init_updated.py
│ │ │ ├── test_read_config_init.py
│ │ │ ├── test_read_global_init.py
│ │ │ ├── test_read_topics_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
│ │ │ └── test_update_topic.py
│ │ └── uv-requirements.txt
│ ├── aws-network-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── aws_network_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── server.py
│ │ │ ├── tools/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── cloud_wan/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── detect_cloudwan_inspection.py
│ │ │ │ │ ├── get_all_cloudwan_routes.py
│ │ │ │ │ ├── get_cloudwan_attachment_details.py
│ │ │ │ │ ├── get_cloudwan_details.py
│ │ │ │ │ ├── get_cloudwan_logs.py
│ │ │ │ │ ├── get_cloudwan_peering_details.py
│ │ │ │ │ ├── get_cloudwan_routes.py
│ │ │ │ │ ├── list_cloudwan_peerings.py
│ │ │ │ │ ├── list_core_networks.py
│ │ │ │ │ └── simulate_cloud_wan_route_change.py
│ │ │ │ ├── general/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── find_ip_address.py
│ │ │ │ │ ├── get_eni_details.py
│ │ │ │ │ └── get_path_trace_methodology.py
│ │ │ │ ├── network_firewall/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── get_firewall_rules.py
│ │ │ │ │ ├── get_network_firewall_flow_logs.py
│ │ │ │ │ └── list_network_firewalls.py
│ │ │ │ ├── transit_gateway/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── detect_transit_gateway_inspection.py
│ │ │ │ │ ├── get_all_transit_gateway_routes.py
│ │ │ │ │ ├── get_transit_gateway_details.py
│ │ │ │ │ ├── get_transit_gateway_flow_logs.py
│ │ │ │ │ ├── get_transit_gateway_routes.py
│ │ │ │ │ ├── list_transit_gateway_peerings.py
│ │ │ │ │ └── list_transit_gateways.py
│ │ │ │ ├── vpc/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── get_vpc_flow_logs.py
│ │ │ │ │ ├── get_vpc_network_details.py
│ │ │ │ │ └── list_vpcs.py
│ │ │ │ └── vpn/
│ │ │ │ ├── __init__.py
│ │ │ │ └── list_vpn_connections.py
│ │ │ └── utils/
│ │ │ ├── __init__.py
│ │ │ ├── aws_common.py
│ │ │ ├── formatters.py
│ │ │ └── vcp_details.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── __init__.py
│ │ │ ├── conftest.py
│ │ │ ├── test_server.py
│ │ │ ├── tools/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── cloud_wan/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── conftest.py
│ │ │ │ │ ├── test_detect_cloudwan_inspection.py
│ │ │ │ │ ├── test_get_all_cloudwan_routes.py
│ │ │ │ │ ├── test_get_cloudwan_attachment_details.py
│ │ │ │ │ ├── test_get_cloudwan_details.py
│ │ │ │ │ ├── test_get_cloudwan_logs.py
│ │ │ │ │ ├── test_get_cloudwan_peering_details.py
│ │ │ │ │ ├── test_get_cloudwan_routes.py
│ │ │ │ │ ├── test_list_core_networks.py
│ │ │ │ │ └── test_simulate_cloud_wan_route_change.py
│ │ │ │ ├── general/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── test_find_ip_address.py
│ │ │ │ │ └── test_get_eni_details.py
│ │ │ │ ├── network_firewall/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── test_get_firewall_rules.py
│ │ │ │ │ ├── test_get_network_firewall_flow_logs.py
│ │ │ │ │ └── test_list_network_firewalls.py
│ │ │ │ ├── transit_gateway/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── test_detect_transit_gateway_inspection.py
│ │ │ │ │ ├── test_get_all_transit_gateway_routes.py
│ │ │ │ │ ├── test_get_tgw_details.py
│ │ │ │ │ ├── test_get_transit_gateway_flow_logs.py
│ │ │ │ │ ├── test_get_transit_gateway_routes.py
│ │ │ │ │ ├── test_list_transit_gateway_peerings.py
│ │ │ │ │ └── test_list_transit_gateways.py
│ │ │ │ ├── vpc/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── test_get_vpc_flow_logs.py
│ │ │ │ │ ├── test_get_vpc_network_details.py
│ │ │ │ │ └── test_list_vpcs.py
│ │ │ │ └── vpn/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_list_vpn_connections.py
│ │ │ └── utils/
│ │ │ ├── __init__.py
│ │ │ ├── test_aws_common.py
│ │ │ ├── test_formatters.py
│ │ │ └── test_vcp_details.py
│ │ └── uv-requirements.txt
│ ├── aws-pricing-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── aws_pricing_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── alternative_pricing.py
│ │ │ ├── cdk_analyzer.py
│ │ │ ├── consts.py
│ │ │ ├── helpers.py
│ │ │ ├── models.py
│ │ │ ├── pricing_client.py
│ │ │ ├── pricing_transformer.py
│ │ │ ├── report_generator.py
│ │ │ ├── server.py
│ │ │ ├── static/
│ │ │ │ ├── COST_REPORT_TEMPLATE.md
│ │ │ │ ├── __init__.py
│ │ │ │ └── patterns/
│ │ │ │ ├── BEDROCK.md
│ │ │ │ └── __init__.py
│ │ │ └── terraform_analyzer.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── __init__.py
│ │ │ ├── conftest.py
│ │ │ ├── test_alternative_pricing.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
│ ├── aws-serverless-mcp-server/
│ │ ├── .pre-commit.config.yaml
│ │ ├── .python-version
│ │ ├── .secrets.baseline
│ │ ├── README.md
│ │ ├── 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/
│ │ │ │ ├── README.md
│ │ │ │ ├── backend.j2
│ │ │ │ ├── frontend.j2
│ │ │ │ └── fullstack.j2
│ │ │ ├── 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
│ │ └── tests/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── conftest.py
│ │ ├── 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
│ ├── aws-support-mcp-server/
│ │ ├── .python-version
│ │ ├── README.md
│ │ ├── 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
│ │ └── tests/
│ │ ├── __init__.py
│ │ ├── conftests.py
│ │ ├── test_aws_support_mcp_server.py
│ │ └── test_models.py
│ ├── bedrock-kb-retrieval-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── bedrock_kb_retrieval_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── knowledgebases/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── clients.py
│ │ │ │ ├── discovery.py
│ │ │ │ └── retrieval.py
│ │ │ ├── models.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── run_tests.sh
│ │ ├── tests/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── conftest.py
│ │ │ ├── test_clients.py
│ │ │ ├── test_discovery.py
│ │ │ ├── test_env_config.py
│ │ │ ├── test_models.py
│ │ │ ├── test_retrieval.py
│ │ │ └── test_server.py
│ │ └── uv-requirements.txt
│ ├── billing-cost-management-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── billing_cost_management_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── models.py
│ │ │ ├── prompts/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── decorator.py
│ │ │ │ ├── graviton_migration.py
│ │ │ │ ├── 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
│ │ │ │ ├── billing_conductor_operations.py
│ │ │ │ ├── billing_conductor_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
│ │ │ └── time_utils.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── conftest.py
│ │ │ ├── prompts/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_prompts.py
│ │ │ ├── test_models.py
│ │ │ ├── test_server.py
│ │ │ ├── tools/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── fixtures.py
│ │ │ │ ├── test_aws_bcm_pricing_calculator_tools.py
│ │ │ │ ├── test_aws_pricing_tools.py
│ │ │ │ ├── test_billing_conductor_operations.py
│ │ │ │ ├── test_billing_conductor_tools.py
│ │ │ │ ├── test_budget_tools.py
│ │ │ │ ├── test_compute_optimizer_tools.py
│ │ │ │ ├── test_cost_anomaly_tools.py
│ │ │ │ ├── test_cost_anomaly_tools_enhanced.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
│ │ │ └── test_time_utils.py
│ │ └── uv-requirements.txt
│ ├── ccapi-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── DO_NOT_RELEASE
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── 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
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── 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
│ ├── cdk-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── 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/
│ │ │ ├── CDK_GENERAL_GUIDANCE.md
│ │ │ ├── CDK_NAG_GUIDANCE.md
│ │ │ ├── __init__.py
│ │ │ └── lambda_powertools/
│ │ │ ├── bedrock.md
│ │ │ ├── cdk.md
│ │ │ ├── dependencies.md
│ │ │ ├── index.md
│ │ │ ├── insights.md
│ │ │ ├── logging.md
│ │ │ ├── metrics.md
│ │ │ └── tracing.md
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── __init__.py
│ │ │ ├── core/
│ │ │ │ ├── test_resources.py
│ │ │ │ ├── test_resources_enhanced.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
│ ├── cfn-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── DO_NOT_RELEASE
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── 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
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── 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
│ ├── cloudtrail-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── cloudtrail_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── common.py
│ │ │ ├── models.py
│ │ │ ├── server.py
│ │ │ └── tools.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── __init__.py
│ │ │ ├── conftest.py
│ │ │ ├── test_init.py
│ │ │ ├── test_main.py
│ │ │ ├── test_models.py
│ │ │ ├── test_server.py
│ │ │ └── test_tools.py
│ │ └── uv-requirements.txt
│ ├── cloudwatch-applicationsignals-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── cloudwatch_applicationsignals_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── audit_presentation_utils.py
│ │ │ ├── audit_utils.py
│ │ │ ├── aws_clients.py
│ │ │ ├── canary_utils.py
│ │ │ ├── change_tools.py
│ │ │ ├── enablement_guides/
│ │ │ │ └── templates/
│ │ │ │ ├── ec2/
│ │ │ │ │ ├── ec2-dotnet-enablement.md
│ │ │ │ │ ├── ec2-java-enablement.md
│ │ │ │ │ ├── ec2-nodejs-enablement.md
│ │ │ │ │ └── ec2-python-enablement.md
│ │ │ │ ├── ecs/
│ │ │ │ │ ├── ecs-dotnet-enablement.md
│ │ │ │ │ ├── ecs-java-enablement.md
│ │ │ │ │ ├── ecs-nodejs-enablement.md
│ │ │ │ │ └── ecs-python-enablement.md
│ │ │ │ ├── eks/
│ │ │ │ │ ├── eks-dotnet-enablement.md
│ │ │ │ │ ├── eks-java-enablement.md
│ │ │ │ │ ├── eks-nodejs-enablement.md
│ │ │ │ │ └── eks-python-enablement.md
│ │ │ │ └── lambda/
│ │ │ │ ├── lambda-dotnet-enablement.md
│ │ │ │ ├── lambda-java-enablement.md
│ │ │ │ ├── lambda-nodejs-enablement.md
│ │ │ │ └── lambda-python-enablement.md
│ │ │ ├── enablement_tools.py
│ │ │ ├── group_tools.py
│ │ │ ├── server.py
│ │ │ ├── service_audit_utils.py
│ │ │ ├── service_tools.py
│ │ │ ├── sli_report_client.py
│ │ │ ├── slo_tools.py
│ │ │ ├── trace_tools.py
│ │ │ └── utils.py
│ │ ├── docker-healthcheck.sh
│ │ ├── evals/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── core/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── captor.py
│ │ │ │ ├── conversation_runner.py
│ │ │ │ ├── eval_config.py
│ │ │ │ ├── eval_mcp_server_wrapper.py
│ │ │ │ ├── eval_runner.py
│ │ │ │ ├── file_tools.py
│ │ │ │ ├── llm_provider.py
│ │ │ │ ├── mcp_client.py
│ │ │ │ ├── mcp_dependency_mocking_handler.py
│ │ │ │ ├── metrics_tracker.py
│ │ │ │ ├── mock_config_path_normalizer.py
│ │ │ │ ├── process_executor.py
│ │ │ │ ├── task.py
│ │ │ │ ├── task_result.py
│ │ │ │ ├── validation_prompts.py
│ │ │ │ └── validator.py
│ │ │ ├── requirements.txt
│ │ │ └── tasks/
│ │ │ ├── __init__.py
│ │ │ └── applicationsignals/
│ │ │ ├── __init__.py
│ │ │ ├── base.py
│ │ │ ├── get_enablement_guide/
│ │ │ │ ├── __init__.py
│ │ │ │ └── enablement_tasks.py
│ │ │ └── investigations/
│ │ │ ├── __init__.py
│ │ │ ├── fixtures/
│ │ │ │ ├── bug-4-list-audit-findings-all-services-all-auditors.json
│ │ │ │ ├── bug-4-list-audit-findings-all-services-default-auditors.json
│ │ │ │ ├── bug-4-list-audit-findings-document-service-and-all-auditors.json
│ │ │ │ └── bug-4-list-services.json
│ │ │ └── investigation_tasks.py
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── conftest.py
│ │ │ ├── test_audit_presentation_utils.py
│ │ │ ├── test_audit_services_filtering.py
│ │ │ ├── test_audit_utils.py
│ │ │ ├── test_aws_profile.py
│ │ │ ├── test_batch_audit.py
│ │ │ ├── test_canary_utils.py
│ │ │ ├── test_change_tools.py
│ │ │ ├── test_enablement_tools.py
│ │ │ ├── test_group_tools.py
│ │ │ ├── test_initialization.py
│ │ │ ├── test_server.py
│ │ │ ├── test_server_audit_functions.py
│ │ │ ├── test_server_audit_tools.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
│ ├── cloudwatch-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── cloudwatch_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── aws_common.py
│ │ │ ├── cloudwatch_alarms/
│ │ │ │ ├── models.py
│ │ │ │ └── tools.py
│ │ │ ├── cloudwatch_logs/
│ │ │ │ ├── models.py
│ │ │ │ └── tools.py
│ │ │ ├── cloudwatch_metrics/
│ │ │ │ ├── cloudformation_template_generator.py
│ │ │ │ ├── constants.py
│ │ │ │ ├── data/
│ │ │ │ │ └── metric_metadata.json
│ │ │ │ ├── metric_analyzer.py
│ │ │ │ ├── metric_data_decomposer.py
│ │ │ │ ├── models.py
│ │ │ │ └── tools.py
│ │ │ ├── common.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── skills/
│ │ │ ├── README.md
│ │ │ └── agentcore-investigation/
│ │ │ ├── SKILL.md
│ │ │ ├── kiro-skill-setup.md
│ │ │ ├── mcp/
│ │ │ │ ├── .mcp.json
│ │ │ │ └── mcp-setup.md
│ │ │ └── references/
│ │ │ └── otel-span-schema.md
│ │ ├── tests/
│ │ │ ├── cloudwatch_alarms/
│ │ │ │ ├── test_active_alarms.py
│ │ │ │ ├── test_alarm_history.py
│ │ │ │ ├── test_alarm_history_integration.py
│ │ │ │ └── test_alarms_error_handling.py
│ │ │ ├── cloudwatch_logs/
│ │ │ │ ├── test_logs_error_handling.py
│ │ │ │ ├── test_logs_models.py
│ │ │ │ └── test_logs_server.py
│ │ │ ├── cloudwatch_metrics/
│ │ │ │ ├── test_analyze_metric.py
│ │ │ │ ├── test_cloudformation_template_generator.py
│ │ │ │ ├── test_decomposer_trend.py
│ │ │ │ ├── test_metric_analyzer.py
│ │ │ │ ├── test_metrics_error_handling.py
│ │ │ │ ├── test_metrics_models.py
│ │ │ │ ├── test_metrics_server.py
│ │ │ │ ├── test_seasonal_detector.py
│ │ │ │ ├── test_seasonality_enum.py
│ │ │ │ ├── test_utils.py
│ │ │ │ └── test_validation_error.py
│ │ │ ├── test_aws_common.py
│ │ │ ├── test_common_and_server.py
│ │ │ ├── test_init.py
│ │ │ └── test_main.py
│ │ └── uv-requirements.txt
│ ├── code-doc-gen-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── code_doc_gen_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── server.py
│ │ │ └── utils/
│ │ │ ├── doc_generator.py
│ │ │ ├── models.py
│ │ │ ├── repomix_manager.py
│ │ │ └── templates.py
│ │ ├── pyproject.toml
│ │ └── tests/
│ │ ├── test_doc_generator.py
│ │ ├── test_doc_generator_edge_cases.py
│ │ ├── test_init.py
│ │ ├── test_main.py
│ │ ├── test_repomix_manager.py
│ │ ├── test_repomix_manager_scenarios.py
│ │ ├── test_repomix_statistics.py
│ │ ├── test_server.py
│ │ ├── test_server_extended.py
│ │ └── test_templates.py
│ ├── core-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── core_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── server.py
│ │ │ └── static/
│ │ │ ├── PROMPT_UNDERSTANDING.md
│ │ │ └── __init__.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── conftest.py
│ │ │ ├── test_init.py
│ │ │ ├── test_main.py
│ │ │ ├── test_response_types.py
│ │ │ ├── test_server.py
│ │ │ └── test_static.py
│ │ └── uv-requirements.txt
│ ├── cost-explorer-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── DO_NOT_RELEASE
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── 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
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── 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
│ ├── document-loader-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ ├── document_loader_mcp_server/
│ │ │ │ ├── __init__.py
│ │ │ │ └── server.py
│ │ │ └── py.typed
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── test_document_parsing.py
│ │ │ └── test_server.py
│ │ └── uv-requirements.txt
│ ├── documentdb-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── 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
│ │ ├── pyproject.toml
│ │ └── 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
│ ├── dynamodb-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── AGENTS.md
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── dynamodb_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── cdk_generator/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── generator.py
│ │ │ │ ├── models.py
│ │ │ │ └── templates/
│ │ │ │ ├── README.md
│ │ │ │ └── stack.ts.j2
│ │ │ ├── common.py
│ │ │ ├── cost_performance_calculator/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── calculator_runner.py
│ │ │ │ ├── cost_calculator.py
│ │ │ │ ├── cost_model.py
│ │ │ │ ├── data_model.py
│ │ │ │ └── report_generator.py
│ │ │ ├── db_analyzer/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── analyzer_utils.py
│ │ │ │ ├── base_plugin.py
│ │ │ │ ├── mysql.py
│ │ │ │ ├── plugin_registry.py
│ │ │ │ ├── postgresql.py
│ │ │ │ └── sqlserver.py
│ │ │ ├── markdown_formatter.py
│ │ │ ├── model_validation_utils.py
│ │ │ ├── prompts/
│ │ │ │ ├── dal_implementation/
│ │ │ │ │ ├── generate_dal_workflow_steps.md
│ │ │ │ │ └── python.md
│ │ │ │ ├── dynamodb_architect.md
│ │ │ │ ├── dynamodb_schema_generator.md
│ │ │ │ ├── json_generation_guide.md
│ │ │ │ ├── next_steps/
│ │ │ │ │ ├── dynamodb_data_model_schema_converter_complete.md
│ │ │ │ │ ├── dynamodb_data_model_validation_complete.md
│ │ │ │ │ ├── dynamodb_data_modeling_complete.md
│ │ │ │ │ ├── generate_data_access_layer_complete.md
│ │ │ │ │ ├── generate_data_access_layer_schema_not_found.md
│ │ │ │ │ └── generate_resources_complete.md
│ │ │ │ ├── transform_model_validation_result.md
│ │ │ │ └── usage_data_generator.md
│ │ │ ├── repo_generation_tool/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── codegen.py
│ │ │ │ ├── core/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── cross_table_validator.py
│ │ │ │ │ ├── file_utils.py
│ │ │ │ │ ├── filter_expression_validator.py
│ │ │ │ │ ├── gsi_validator.py
│ │ │ │ │ ├── key_template_parser.py
│ │ │ │ │ ├── language_config.py
│ │ │ │ │ ├── language_sample_generator.py
│ │ │ │ │ ├── language_type_mapper.py
│ │ │ │ │ ├── range_query_validator.py
│ │ │ │ │ ├── schema_definitions.py
│ │ │ │ │ ├── schema_loader.py
│ │ │ │ │ ├── schema_validator.py
│ │ │ │ │ ├── type_mappings.py
│ │ │ │ │ ├── usage_data_formatter.py
│ │ │ │ │ ├── usage_data_loader.py
│ │ │ │ │ ├── usage_data_validator.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ └── validation_utils.py
│ │ │ │ ├── docs/
│ │ │ │ │ ├── ADDING_NEW_LANGUAGES.md
│ │ │ │ │ ├── ADVANCED_USAGE.md
│ │ │ │ │ ├── FILTER_EXPRESSIONS.md
│ │ │ │ │ ├── GSI_SUPPORT.md
│ │ │ │ │ ├── LANGUAGE_CONFIGURATION.md
│ │ │ │ │ ├── RANGE_QUERIES.md
│ │ │ │ │ ├── SCHEMA_VALIDATION.md
│ │ │ │ │ ├── TESTING.md
│ │ │ │ │ ├── TRANSACTIONS.md
│ │ │ │ │ └── USAGE_DATA.md
│ │ │ │ ├── generators/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── access_pattern_mapper.py
│ │ │ │ │ ├── base_generator.py
│ │ │ │ │ ├── jinja2_generator.py
│ │ │ │ │ └── sample_generators.py
│ │ │ │ ├── languages/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── python/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── base_repository.py
│ │ │ │ │ ├── language_config.json
│ │ │ │ │ ├── ruff.toml
│ │ │ │ │ ├── sample_generators.py
│ │ │ │ │ ├── templates/
│ │ │ │ │ │ ├── entities_header.j2
│ │ │ │ │ │ ├── entity_template.j2
│ │ │ │ │ │ ├── repositories_header.j2
│ │ │ │ │ │ ├── repository_template.j2
│ │ │ │ │ │ ├── transaction_service_template.j2
│ │ │ │ │ │ └── usage_examples_template.j2
│ │ │ │ │ ├── type_mappings.py
│ │ │ │ │ └── usage_data_formatter.py
│ │ │ │ └── output/
│ │ │ │ ├── __init__.py
│ │ │ │ └── output_manager.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── __init__.py
│ │ │ ├── cdk_generator/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── integration/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── conftest.py
│ │ │ │ │ ├── test_cdk_compilation.py
│ │ │ │ │ ├── test_cdk_deployment.py
│ │ │ │ │ └── test_cdk_generation.py
│ │ │ │ ├── test_generator.py
│ │ │ │ └── test_models.py
│ │ │ ├── conftest.py
│ │ │ ├── cost_performance_calculator/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── conftest.py
│ │ │ │ ├── test_calculator_runner.py
│ │ │ │ ├── test_cost_calculator.py
│ │ │ │ ├── test_data_model.py
│ │ │ │ ├── test_data_model_batch_get_item.py
│ │ │ │ ├── test_data_model_batch_write_item.py
│ │ │ │ ├── test_data_model_delete_item.py
│ │ │ │ ├── test_data_model_get_item.py
│ │ │ │ ├── test_data_model_gsi.py
│ │ │ │ ├── test_data_model_put_item.py
│ │ │ │ ├── test_data_model_query.py
│ │ │ │ ├── test_data_model_scan.py
│ │ │ │ ├── test_data_model_table.py
│ │ │ │ ├── test_data_model_transact_get_items.py
│ │ │ │ ├── test_data_model_transact_write_items.py
│ │ │ │ ├── test_data_model_update_item.py
│ │ │ │ ├── test_integration.py
│ │ │ │ └── test_report_generator.py
│ │ │ ├── db_analyzer/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── conftest.py
│ │ │ │ ├── test_analyzer_utils.py
│ │ │ │ ├── test_mysql_managed_mode.py
│ │ │ │ └── test_plugins.py
│ │ │ ├── evals/
│ │ │ │ ├── README.md
│ │ │ │ ├── dynamic_evaluators.py
│ │ │ │ ├── evaluation_registry.py
│ │ │ │ ├── logging_config.py
│ │ │ │ ├── multiturn_evaluator.py
│ │ │ │ ├── scenarios.py
│ │ │ │ └── test_dspy_evals.py
│ │ │ ├── repo_generation_tool/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── conftest.py
│ │ │ │ ├── fixtures/
│ │ │ │ │ ├── expected_outputs/
│ │ │ │ │ │ └── python/
│ │ │ │ │ │ ├── deals/
│ │ │ │ │ │ │ ├── access_pattern_mapping.json
│ │ │ │ │ │ │ ├── base_repository.py
│ │ │ │ │ │ │ ├── entities.py
│ │ │ │ │ │ │ ├── repositories.py
│ │ │ │ │ │ │ ├── ruff.toml
│ │ │ │ │ │ │ └── usage_examples.py
│ │ │ │ │ │ ├── ecommerce/
│ │ │ │ │ │ │ ├── access_pattern_mapping.json
│ │ │ │ │ │ │ ├── base_repository.py
│ │ │ │ │ │ │ ├── entities.py
│ │ │ │ │ │ │ ├── repositories.py
│ │ │ │ │ │ │ ├── ruff.toml
│ │ │ │ │ │ │ └── usage_examples.py
│ │ │ │ │ │ ├── elearning/
│ │ │ │ │ │ │ ├── access_pattern_mapping.json
│ │ │ │ │ │ │ ├── base_repository.py
│ │ │ │ │ │ │ ├── entities.py
│ │ │ │ │ │ │ ├── repositories.py
│ │ │ │ │ │ │ ├── ruff.toml
│ │ │ │ │ │ │ └── usage_examples.py
│ │ │ │ │ │ ├── food_delivery/
│ │ │ │ │ │ │ ├── access_pattern_mapping.json
│ │ │ │ │ │ │ ├── base_repository.py
│ │ │ │ │ │ │ ├── entities.py
│ │ │ │ │ │ │ ├── repositories.py
│ │ │ │ │ │ │ ├── ruff.toml
│ │ │ │ │ │ │ └── usage_examples.py
│ │ │ │ │ │ ├── gaming_leaderboard/
│ │ │ │ │ │ │ ├── access_pattern_mapping.json
│ │ │ │ │ │ │ ├── base_repository.py
│ │ │ │ │ │ │ ├── entities.py
│ │ │ │ │ │ │ ├── repositories.py
│ │ │ │ │ │ │ ├── ruff.toml
│ │ │ │ │ │ │ └── usage_examples.py
│ │ │ │ │ │ ├── package_delivery/
│ │ │ │ │ │ │ ├── access_pattern_mapping.json
│ │ │ │ │ │ │ ├── base_repository.py
│ │ │ │ │ │ │ ├── entities.py
│ │ │ │ │ │ │ ├── repositories.py
│ │ │ │ │ │ │ ├── ruff.toml
│ │ │ │ │ │ │ └── usage_examples.py
│ │ │ │ │ │ ├── saas/
│ │ │ │ │ │ │ ├── access_pattern_mapping.json
│ │ │ │ │ │ │ ├── base_repository.py
│ │ │ │ │ │ │ ├── entities.py
│ │ │ │ │ │ │ ├── repositories.py
│ │ │ │ │ │ │ ├── ruff.toml
│ │ │ │ │ │ │ └── usage_examples.py
│ │ │ │ │ │ ├── social_media/
│ │ │ │ │ │ │ ├── access_pattern_mapping.json
│ │ │ │ │ │ │ ├── base_repository.py
│ │ │ │ │ │ │ ├── entities.py
│ │ │ │ │ │ │ ├── repositories.py
│ │ │ │ │ │ │ ├── ruff.toml
│ │ │ │ │ │ │ └── usage_examples.py
│ │ │ │ │ │ ├── user_analytics/
│ │ │ │ │ │ │ ├── access_pattern_mapping.json
│ │ │ │ │ │ │ ├── base_repository.py
│ │ │ │ │ │ │ ├── entities.py
│ │ │ │ │ │ │ ├── repositories.py
│ │ │ │ │ │ │ ├── ruff.toml
│ │ │ │ │ │ │ └── usage_examples.py
│ │ │ │ │ │ └── user_registration/
│ │ │ │ │ │ ├── access_pattern_mapping.json
│ │ │ │ │ │ ├── base_repository.py
│ │ │ │ │ │ ├── entities.py
│ │ │ │ │ │ ├── repositories.py
│ │ │ │ │ │ ├── ruff.toml
│ │ │ │ │ │ ├── transaction_service.py
│ │ │ │ │ │ └── usage_examples.py
│ │ │ │ │ ├── invalid_schemas/
│ │ │ │ │ │ ├── comprehensive_invalid_schema.json
│ │ │ │ │ │ ├── invalid_cross_table_patterns.json
│ │ │ │ │ │ ├── invalid_filter_expression_schema.json
│ │ │ │ │ │ ├── invalid_gsi_schema.json
│ │ │ │ │ │ ├── invalid_gsi_schema_errors.md
│ │ │ │ │ │ ├── invalid_multi_attribute_keys_schema.json
│ │ │ │ │ │ ├── test_cross_table_entity_ref.json
│ │ │ │ │ │ ├── test_cross_table_refs.json
│ │ │ │ │ │ ├── test_duplicate_entity_names.json
│ │ │ │ │ │ ├── test_entity_ref_schema.json
│ │ │ │ │ │ └── test_multi_table_schema.json
│ │ │ │ │ ├── invalid_usage_data/
│ │ │ │ │ │ ├── empty_sample_data.json
│ │ │ │ │ │ ├── invalid_field_names.json
│ │ │ │ │ │ ├── invalid_json_structure.json
│ │ │ │ │ │ ├── malformed_json.json.txt
│ │ │ │ │ │ ├── missing_entities.json
│ │ │ │ │ │ ├── missing_required_sections.json
│ │ │ │ │ │ ├── unknown_entities.json
│ │ │ │ │ │ └── unknown_top_level_keys.json
│ │ │ │ │ ├── valid_schemas/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── deals_app/
│ │ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ │ └── deals_schema.json
│ │ │ │ │ │ ├── ecommerce_app/
│ │ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ │ └── ecommerce_schema.json
│ │ │ │ │ │ ├── elearning_platform/
│ │ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ │ └── elearning_schema.json
│ │ │ │ │ │ ├── food_delivery_app/
│ │ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ │ └── food_delivery_schema.json
│ │ │ │ │ │ ├── gaming_leaderboard/
│ │ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ │ └── gaming_leaderboard_schema.json
│ │ │ │ │ │ ├── package_delivery_app/
│ │ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ │ └── package_delivery_app_schema.json
│ │ │ │ │ │ ├── saas_app/
│ │ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ │ └── project_management_schema.json
│ │ │ │ │ │ ├── social_media_app/
│ │ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ │ └── social_media_app_schema.json
│ │ │ │ │ │ ├── user_analytics/
│ │ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ │ └── user_analytics_schema.json
│ │ │ │ │ │ └── user_registration/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── user_registration_schema.json
│ │ │ │ │ └── valid_usage_data/
│ │ │ │ │ ├── deals_app/
│ │ │ │ │ │ └── deals_usage_data.json
│ │ │ │ │ ├── ecommerce_app/
│ │ │ │ │ │ └── ecommerce_usage_data.json
│ │ │ │ │ ├── elearning_platform/
│ │ │ │ │ │ └── elearning_usage_data.json
│ │ │ │ │ ├── food_delivery_app/
│ │ │ │ │ │ └── food_delivery_usage_data.json
│ │ │ │ │ ├── gaming_leaderboard/
│ │ │ │ │ │ └── gaming_leaderboard_usage_data.json
│ │ │ │ │ ├── package_delivery_app/
│ │ │ │ │ │ └── package_delivery_app_usage_data.json
│ │ │ │ │ ├── saas_app/
│ │ │ │ │ │ └── project_management_usage_data.json
│ │ │ │ │ ├── social_media_app/
│ │ │ │ │ │ └── social_media_app_usage_data.json
│ │ │ │ │ ├── user_analytics/
│ │ │ │ │ │ └── user_analytics_usage_data.json
│ │ │ │ │ └── user_registration/
│ │ │ │ │ └── user_registration_usage_data.json
│ │ │ │ ├── integration/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── test_cli_integration.py
│ │ │ │ │ ├── test_consistent_read_integration.py
│ │ │ │ │ ├── test_filter_expression_generation.py
│ │ │ │ │ ├── test_gsi_pipeline_integration.py
│ │ │ │ │ ├── test_python_code_generation_pipeline.py
│ │ │ │ │ ├── test_python_snapshot_generation.py
│ │ │ │ │ ├── test_sparse_gsi_integration.py
│ │ │ │ │ └── test_transaction_service_generation.py
│ │ │ │ ├── scripts/
│ │ │ │ │ └── manage_snapshots.py
│ │ │ │ └── unit/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_access_pattern_mapper.py
│ │ │ │ ├── test_codegen.py
│ │ │ │ ├── test_cross_table_validation.py
│ │ │ │ ├── test_file_utils.py
│ │ │ │ ├── test_filter_expression_codegen.py
│ │ │ │ ├── test_filter_expression_validator.py
│ │ │ │ ├── test_gsi_projections.py
│ │ │ │ ├── test_gsi_validator.py
│ │ │ │ ├── test_jinja2_generator.py
│ │ │ │ ├── test_key_template_parser.py
│ │ │ │ ├── test_language_config.py
│ │ │ │ ├── test_language_type_mapper.py
│ │ │ │ ├── test_output_manager.py
│ │ │ │ ├── test_range_query_validator.py
│ │ │ │ ├── test_sample_generators.py
│ │ │ │ ├── test_schema_definitions.py
│ │ │ │ ├── test_schema_loader.py
│ │ │ │ ├── test_schema_validator.py
│ │ │ │ ├── test_sparse_gsi.py
│ │ │ │ ├── test_type_mappings.py
│ │ │ │ ├── test_usage_data_loader.py
│ │ │ │ ├── test_usage_data_validator.py
│ │ │ │ ├── test_utils.py
│ │ │ │ └── test_validation_utils.py
│ │ │ ├── test_common.py
│ │ │ ├── test_dynamodb_server.py
│ │ │ ├── test_markdown_formatter.py
│ │ │ └── test_model_validation_utils.py
│ │ └── uv-requirements.txt
│ ├── ecs-mcp-server/
│ │ ├── .python-version
│ │ ├── DEVELOPMENT.md
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── ecs_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── api/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── containerize.py
│ │ │ │ ├── delete.py
│ │ │ │ ├── ecs_troubleshooting.py
│ │ │ │ ├── express.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
│ │ │ │ ├── express.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
│ │ ├── pyproject.toml
│ │ ├── pyrightconfig.json
│ │ ├── server.json
│ │ └── 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
│ │ │ └── utils/
│ │ │ └── mcp_call_tool.py
│ │ ├── llm_testing/
│ │ │ ├── README.md
│ │ │ ├── SCRIPT_IMPROVEMENTS.md
│ │ │ ├── invalid_cfn_template.yaml
│ │ │ ├── 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
│ │ │ └── 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_express.py
│ │ ├── test_image_pull_failure.py
│ │ ├── test_image_pull_failure_extended.py
│ │ ├── test_infrastructure.py
│ │ ├── test_infrastructure_role.py
│ │ ├── test_integration.py
│ │ ├── test_main.py
│ │ ├── test_resource_management.py
│ │ ├── test_resource_management_api_operation.py
│ │ ├── test_resource_management_tool.py
│ │ ├── test_security_integration.py
│ │ ├── test_status.py
│ │ ├── test_status_pytest.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_aws_utils_express.py
│ │ ├── test_config.py
│ │ ├── test_docker.py
│ │ ├── test_response_sanitization.py
│ │ ├── test_security.py
│ │ ├── test_security_extended.py
│ │ ├── test_templates.py
│ │ └── test_time_utils.py
│ ├── eks-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── 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
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── 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
│ ├── elasticache-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── 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
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── test_connection.py
│ │ │ ├── test_decorators.py
│ │ │ ├── test_init.py
│ │ │ ├── test_main.py
│ │ │ └── tools/
│ │ │ ├── cc/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_connect.py
│ │ │ │ ├── test_connect_additional.py
│ │ │ │ ├── test_connect_coverage.py
│ │ │ │ ├── test_connect_coverage_additional.py
│ │ │ │ ├── test_create.py
│ │ │ │ ├── test_create_additional.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.py
│ │ │ │ ├── test_connect_additional.py
│ │ │ │ ├── test_connect_coverage_additional.py
│ │ │ │ ├── test_connect_optional_fields.py
│ │ │ │ ├── test_connect_partial_coverage.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.py
│ │ │ ├── test_connect_additional.py
│ │ │ ├── test_connect_coverage_additional.py
│ │ │ ├── test_connect_optional_fields.py
│ │ │ ├── test_create.py
│ │ │ ├── test_delete.py
│ │ │ ├── test_describe.py
│ │ │ └── test_modify.py
│ │ └── uv-requirements.txt
│ ├── finch-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── 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
│ │ ├── pyproject.toml
│ │ └── 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
│ ├── frontend-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── frontend_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── server.py
│ │ │ ├── static/
│ │ │ │ └── react/
│ │ │ │ ├── essential-knowledge.md
│ │ │ │ └── troubleshooting.md
│ │ │ └── utils/
│ │ │ ├── __init__.py
│ │ │ └── file_utils.py
│ │ ├── pyproject.toml
│ │ └── tests/
│ │ ├── test_file_utils.py
│ │ ├── test_init.py
│ │ ├── test_main.py
│ │ └── test_server.py
│ ├── git-repo-research-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── 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
│ │ ├── pyproject.toml
│ │ ├── 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
│ ├── healthimaging-mcp-server/
│ │ ├── .dockerignore
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── healthimaging_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── healthimaging_operations.py
│ │ │ ├── main.py
│ │ │ ├── models.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── conftest.py
│ │ │ ├── test_main.py
│ │ │ ├── test_models.py
│ │ │ ├── test_operations.py
│ │ │ ├── test_server.py
│ │ │ └── test_validation_edge_cases.py
│ │ └── uv-requirements.txt
│ ├── healthlake-mcp-server/
│ │ ├── .dockerignore
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── CONTRIBUTING.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── healthlake_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── fhir_operations.py
│ │ │ ├── main.py
│ │ │ ├── models.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── examples/
│ │ │ ├── README.md
│ │ │ └── mcp_config.json
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── conftest.py
│ │ │ ├── test_fhir_client_comprehensive.py
│ │ │ ├── test_fhir_error_scenarios.py
│ │ │ ├── test_fhir_operations.py
│ │ │ ├── test_integration_mock_based.py
│ │ │ ├── test_main.py
│ │ │ ├── test_main_edge_cases.py
│ │ │ ├── test_mcp_integration_coverage.py
│ │ │ ├── test_models.py
│ │ │ ├── test_models_edge_cases.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
│ ├── iam-mcp-server/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── DESIGN_COMPLIANCE.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── iam_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── aws_client.py
│ │ │ ├── context.py
│ │ │ ├── errors.py
│ │ │ ├── models.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── examples/
│ │ │ ├── get_policy_document_example.py
│ │ │ └── inline_policy_demo.py
│ │ ├── pyproject.toml
│ │ ├── run_tests.sh
│ │ ├── tests/
│ │ │ ├── test_context.py
│ │ │ ├── test_errors.py
│ │ │ ├── test_inline_policies.py
│ │ │ └── test_server.py
│ │ └── uv-requirements.txt
│ ├── lambda-tool-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── lambda_tool_mcp_server/
│ │ │ ├── __init__.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── examples/
│ │ │ ├── README.md
│ │ │ └── sample_functions/
│ │ │ ├── customer-create/
│ │ │ │ └── app.py
│ │ │ ├── customer-id-from-email/
│ │ │ │ └── app.py
│ │ │ ├── customer-info-from-id/
│ │ │ │ └── app.py
│ │ │ └── template.yml
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── conftest.py
│ │ │ ├── test_format_lambda_response.py
│ │ │ ├── test_integration.py
│ │ │ ├── test_integration_coverage.py
│ │ │ ├── test_register_lambda_functions.py
│ │ │ ├── test_schema_integration.py
│ │ │ ├── test_server.py
│ │ │ ├── test_server_coverage.py
│ │ │ └── test_server_coverage_additional.py
│ │ └── uv-requirements.txt
│ ├── mcp-lambda-handler/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ └── mcp_lambda_handler/
│ │ │ ├── __init__.py
│ │ │ ├── mcp_lambda_handler.py
│ │ │ ├── session.py
│ │ │ └── types.py
│ │ ├── pyproject.toml
│ │ └── tests/
│ │ └── test_lambda_handler.py
│ ├── memcached-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── ELASTICACHECONNECT.md
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── memcached_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── common/
│ │ │ │ ├── config.py
│ │ │ │ ├── connection.py
│ │ │ │ └── server.py
│ │ │ ├── context.py
│ │ │ ├── main.py
│ │ │ └── tools/
│ │ │ └── cache.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── test_cache.py
│ │ │ ├── test_cache_readonly.py
│ │ │ ├── test_connection.py
│ │ │ ├── test_init.py
│ │ │ └── test_main.py
│ │ └── uv-requirements.txt
│ ├── mysql-mcp-server/
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── mysql_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── connection/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── abstract_db_connection.py
│ │ │ │ ├── asyncmy_pool_connection.py
│ │ │ │ ├── db_connection_singleton.py
│ │ │ │ └── rds_data_api_connection.py
│ │ │ ├── constants.py
│ │ │ ├── mutable_sql_detector.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── conftest.py
│ │ │ ├── test_abstract_db_connection.py
│ │ │ ├── test_asyncmy_pool_connection.py
│ │ │ ├── test_db_connection_singleton.py
│ │ │ ├── test_rds_data_api_connection.py
│ │ │ └── test_server.py
│ │ └── uv-requirements.txt
│ ├── nova-canvas-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── nova_canvas_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── consts.py
│ │ │ ├── models.py
│ │ │ ├── novacanvas.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── conftest.py
│ │ │ ├── test_models.py
│ │ │ ├── test_novacanvas.py
│ │ │ └── test_server.py
│ │ └── uv-requirements.txt
│ ├── openapi-mcp-server/
│ │ ├── .coveragerc
│ │ ├── .dockerignore
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── AUTHENTICATION.md
│ │ ├── AWS_BEST_PRACTICES.md
│ │ ├── CHANGELOG.md
│ │ ├── DEPLOYMENT.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── OBSERVABILITY.md
│ │ ├── README.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.py
│ │ │ └── openapi_validator.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── pyrightconfig.json
│ │ └── tests/
│ │ ├── README.md
│ │ ├── api/
│ │ │ └── test_config.py
│ │ ├── auth/
│ │ │ ├── test_api_key_auth.py
│ │ │ ├── test_auth_cache.py
│ │ │ ├── test_auth_errors.py
│ │ │ ├── test_auth_factory.py
│ │ │ ├── test_auth_factory_caching.py
│ │ │ ├── test_auth_factory_coverage.py
│ │ │ ├── test_auth_protocol.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_provider_additional.py
│ │ │ ├── test_base_auth.py
│ │ │ ├── test_base_auth_coverage.py
│ │ │ ├── test_basic_auth.py
│ │ │ ├── test_bearer_auth.py
│ │ │ ├── test_cognito_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_register.py
│ │ │ └── test_register_coverage.py
│ │ ├── prompts/
│ │ │ ├── standalone/
│ │ │ │ ├── test_operation_prompt.py
│ │ │ │ ├── test_prompt_arguments.py
│ │ │ │ └── test_secure_operation_prompt.py
│ │ │ ├── test_mcp_prompt_manager.py
│ │ │ ├── test_mcp_prompt_manager_integration.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
│ │ ├── test_api_name.py
│ │ ├── test_cache_coverage_89.py
│ │ ├── test_client.py
│ │ ├── test_coverage_boost.py
│ │ ├── test_init.py
│ │ ├── test_main.py
│ │ ├── test_main_extended.py
│ │ ├── test_openapi_coverage_89.py
│ │ ├── test_server.py
│ │ ├── test_server_auth_errors.py
│ │ ├── test_server_coverage_boost.py
│ │ ├── test_server_coverage_boost_2.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
│ │ └── utils/
│ │ ├── test_cache_provider.py
│ │ ├── test_error_handler.py
│ │ ├── test_error_handler_boost.py
│ │ ├── test_error_handler_extended.py
│ │ ├── test_error_handler_fix.py
│ │ ├── test_http_client.py
│ │ ├── test_http_client_comprehensive.py
│ │ ├── test_http_client_extended.py
│ │ ├── test_http_client_extended2.py
│ │ ├── test_http_client_import_error.py
│ │ ├── test_metrics_provider.py
│ │ ├── test_metrics_provider_decorators.py
│ │ ├── test_metrics_provider_extended2.py
│ │ ├── test_metrics_provider_prometheus.py
│ │ ├── test_openapi.py
│ │ └── test_openapi_validator.py
│ ├── postgres-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── postgres_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── connection/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── abstract_db_connection.py
│ │ │ │ ├── cp_api_connection.py
│ │ │ │ ├── db_connection_map.py
│ │ │ │ ├── psycopg_pool_connection.py
│ │ │ │ └── rds_api_connection.py
│ │ │ ├── mutable_sql_detector.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── kiro_power/
│ │ │ ├── POWER.md
│ │ │ ├── mcp.json
│ │ │ └── steering/
│ │ │ ├── aurora-postgres-mcp.md
│ │ │ └── aurora-postgres.md
│ │ ├── kiro_proj_steering/
│ │ │ └── tech.md
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── conftest.py
│ │ │ ├── e2e_test_sql_injection.py
│ │ │ ├── test_abstract_db_connection.py
│ │ │ ├── test_cp_api_connection.py
│ │ │ ├── test_cp_api_iam_policy.py
│ │ │ ├── test_cp_api_simple_functions.py
│ │ │ ├── test_db_connection_map.py
│ │ │ ├── test_psycopg_connector.py
│ │ │ ├── test_rds_api_connection.py
│ │ │ ├── test_server.py
│ │ │ ├── test_server_error_handling.py
│ │ │ ├── test_server_helpers.py
│ │ │ └── test_server_internal_functions.py
│ │ └── uv-requirements.txt
│ ├── prometheus-mcp-server/
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── prometheus_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── consts.py
│ │ │ ├── models.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── 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
│ ├── redshift-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── redshift_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── consts.py
│ │ │ ├── models.py
│ │ │ ├── redshift.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── test_init.py
│ │ │ ├── test_main.py
│ │ │ ├── test_redshift.py
│ │ │ └── test_server.py
│ │ └── uv-requirements.txt
│ ├── s3-tables-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── CONTEXT.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── 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
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── 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
│ ├── sagemaker-ai-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── sagemaker_ai_mcp_server/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── aws_helper.py
│ │ │ ├── consts.py
│ │ │ ├── logging_helper.py
│ │ │ ├── sagemaker_hyperpod/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── hyperpod_cluster_node_handler.py
│ │ │ │ ├── hyperpod_stack_handler.py
│ │ │ │ └── models.py
│ │ │ └── server.py
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── __init__.py
│ │ │ ├── conftest.py
│ │ │ ├── test_aws_helper.py
│ │ │ ├── test_hyperpod_cluster_node_handler.py
│ │ │ ├── test_hyperpod_stack_handler.py
│ │ │ ├── test_init.py
│ │ │ ├── test_logging_helper.py
│ │ │ ├── test_main.py
│ │ │ ├── test_models.py
│ │ │ └── test_server.py
│ │ └── uv-requirements.txt
│ ├── sagemaker-unified-studio-spark-troubleshooting-mcp-server/
│ │ └── README.md
│ ├── sagemaker-unified-studio-spark-upgrade-mcp-server/
│ │ └── README.md
│ ├── stepfunctions-tool-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── stepfunctions_tool_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── aws_helper.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── 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
│ ├── syntheticdata-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── syntheticdata_mcp_server/
│ │ │ ├── __init__.py
│ │ │ ├── pandas_interpreter.py
│ │ │ ├── server.py
│ │ │ └── storage/
│ │ │ ├── __init__.py
│ │ │ ├── base.py
│ │ │ ├── loader.py
│ │ │ └── s3.py
│ │ ├── pyproject.toml
│ │ └── 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
│ ├── terraform-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── DO_NOT_RELEASE
│ │ ├── Dockerfile
│ │ ├── README.md
│ │ ├── 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/
│ │ │ ├── AWSCC_PROVIDER_RESOURCES.md
│ │ │ ├── AWS_PROVIDER_RESOURCES.md
│ │ │ ├── AWS_TERRAFORM_BEST_PRACTICES.md
│ │ │ ├── MCP_INSTRUCTIONS.md
│ │ │ ├── TERRAFORM_WORKFLOW_GUIDE.md
│ │ │ └── __init__.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── conftest.py
│ │ │ ├── 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.py
│ │ │ └── test_utils_additional.py
│ │ └── uv-requirements.txt
│ ├── timestream-for-influxdb-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── awslabs/
│ │ │ ├── __init__.py
│ │ │ └── timestream_for_influxdb_mcp_server/
│ │ │ ├── __init__.py
│ │ │ └── server.py
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── test_init.py
│ │ │ ├── test_main.py
│ │ │ └── test_server.py
│ │ └── uv-requirements.txt
│ ├── valkey-mcp-server/
│ │ ├── .gitignore
│ │ ├── .python-version
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── ELASTICACHECONNECT.md
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── 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
│ │ ├── docker-healthcheck.sh
│ │ ├── pyproject.toml
│ │ ├── tests/
│ │ │ ├── test_bitmap.py
│ │ │ ├── test_config.py
│ │ │ ├── test_connection.py
│ │ │ ├── test_hash.py
│ │ │ ├── test_hyperloglog.py
│ │ │ ├── test_init.py
│ │ │ ├── test_json.py
│ │ │ ├── test_json_additional.py
│ │ │ ├── test_json_readonly.py
│ │ │ ├── test_list.py
│ │ │ ├── test_list_additional.py
│ │ │ ├── test_list_readonly.py
│ │ │ ├── test_main.py
│ │ │ ├── test_misc.py
│ │ │ ├── test_server_management.py
│ │ │ ├── test_set.py
│ │ │ ├── test_set_readonly.py
│ │ │ ├── test_sorted_set.py
│ │ │ ├── test_sorted_set_additional.py
│ │ │ ├── test_sorted_set_readonly.py
│ │ │ ├── test_stream.py
│ │ │ ├── test_stream_additional.py
│ │ │ ├── test_stream_readonly.py
│ │ │ └── test_string.py
│ │ └── uv-requirements.txt
│ └── well-architected-security-mcp-server/
│ ├── .python-version
│ ├── PROMPT_TEMPLATE.md
│ ├── README.md
│ ├── 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
│ ├── pyproject.toml
│ └── tests/
│ ├── README.md
│ ├── __init__.py
│ ├── conftest.py
│ ├── test_access_analyzer_fix.py
│ ├── test_network_security.py
│ ├── test_network_security_additional.py
│ ├── test_prompt_utils.py
│ ├── test_prompt_utils_coverage.py
│ ├── test_resource_utils.py
│ ├── test_resource_utils_fix.py
│ ├── test_security_services.py
│ ├── test_security_services_additional.py
│ ├── test_security_services_coverage.py
│ ├── test_server.py
│ ├── test_server_additional.py
│ ├── test_server_coverage.py
│ ├── test_server_prompts.py
│ ├── test_server_security_findings.py
│ ├── test_storage_security.py
│ ├── test_storage_security_additional.py
│ ├── test_storage_security_comprehensive.py
│ ├── test_storage_security_edge_cases.py
│ ├── test_storage_security_recommendations.py
│ └── test_user_agent_config.py
├── testing/
│ ├── README.md
│ ├── __init__.py
│ ├── mcp_test_client.py
│ ├── mcp_test_runner.py
│ ├── pytest_utils.py
│ └── types.py
└── trivy.yaml
================================================
FILE CONTENTS
================================================
================================================
FILE: .devcontainer/devcontainer.json
================================================
{
"containerEnv": {
"MY_CONTAINER_VAR": "${localEnv:MY_CONTAINER_VAR:default-container-here}"
},
"customizations": {
"vscode": {
"extensions": [
"amazonwebservices.amazon-q-vscode",
"amazonwebservices.aws-toolkit-vscode",
"github.copilot",
"github.copilot-chat",
"github.codespaces",
"github.vscode-github-actions",
"github.vscode-pull-request-github",
"ms-azuretools.vscode-docker",
"ms-vscode-remote.remote-containers",
"saoudrizwan.claude-dev"
]
}
},
"features": {
"ghcr.io/devcontainers-extra/features/aws-cdk:2.0.15": {},
"ghcr.io/devcontainers-extra/features/typescript:2.0.15": {},
"ghcr.io/devcontainers/features/aws-cli:1.1.1": {},
"ghcr.io/devcontainers/features/common-utils:2.5.3": {
"configureZshAsDefaultShell": true
},
"ghcr.io/devcontainers/features/go:1.3.2": {},
"ghcr.io/devcontainers/features/java:1.6.3": {
"jdkDistro": "amzn"
},
"ghcr.io/devcontainers/features/node:1.6.2": {},
"ghcr.io/devcontainers/features/nvidia-cuda:1.2.1": {},
"ghcr.io/devcontainers/features/powershell:1.5.1": {},
"ghcr.io/devcontainers/features/python:1.7.1": {},
"ghcr.io/devcontainers/features/ruby:1.3.1": {},
"ghcr.io/devcontainers/features/rust:1.3.2": {},
"ghcr.io/devcontainers/features/sshd:1.0.10": {},
"ghcr.io/devcontainers/features/terraform:1.3.10": {}
},
"hostRequirements": {
"cpus": 4
},
"image": "mcr.microsoft.com/devcontainers/universal:2.9.0",
"postCreateCommand": {
"Install Extra Apt Packages": "sudo apt -y update && sudo apt -y install graphviz",
"Install Extra Node Packages": "npm install --global @anthropic-ai/claude-code",
"Install Extra Python Packages": "pip install uv pre-commit detect-secrets cookiecutter pyright pytest pytest-asyncio pytest-cov pytest-mock"
},
"postStartCommand": {
"Install Pre-Commit": "pre-commit install"
},
"remoteEnv": {
"ANTHROPIC_MODEL": "${localEnv:ANTHROPIC_MODEL:us.anthropic.claude-3-7-sonnet-20250219-v1:0}",
"AWS_ACCESS_KEY_ID": "${localEnv:AWS_ACCESS_KEY_ID}",
"AWS_DEFAULT_REGION": "${localEnv:AWS_DEFAULT_REGION:us-west-2}",
"AWS_PROFILE": "${localEnv:AWS_PROFILE:default}",
"AWS_REGION": "${localEnv:AWS_REGION:us-west-2}",
"AWS_SECRET_ACCESS_KEY": "${localEnv:AWS_SECRET_ACCESS_KEY}",
"AWS_SESSION_TOKEN": "${localEnv:AWS_SESSION_TOKEN}",
"CLAUDE_CODE_USE_BEDROCK": "1",
"DISABLE_PROMPT_CACHING": "1",
"GITHUB_DYNAMIC_TOOLSETS": "1",
"GITHUB_PERSONAL_ACCESS_TOKEN": "${localEnv:GITHUB_TOKEN}",
"GITHUB_TOOLSETS": "all",
"MY_ENV_VAR": "${containerEnv:MY_CONTAINER_VAR:default-local-here}"
}
}
================================================
FILE: .github/CODEOWNERS
================================================
# [CODEOWNERS](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners#about-code-owners)
## Default owners for everything in the repo
* @awslabs/mcp-admins @awslabs/mcp-maintainers
CODE_OF_CONDUCT.md @awslabs/mcp-admins
CONTRIBUTING.md @awslabs/mcp-admins
LICENSE @awslabs/mcp-admins
NOTICE @awslabs/mcp-admins
/.github/ @awslabs/mcp-admins
/.devcontainer/ @awslabs/mcp-admins
/scripts/ @awslabs/mcp-admins
.gitignore @awslabs/mcp-admins
.pre-commit-config.yaml @awslabs/mcp-admins
.ruff.toml @awslabs/mcp-admins
.secrets.baseline @awslabs/mcp-admins
## Alphabetical listing of MCP servers
/src/amazon-bedrock-agentcore-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @theagenticguy @scottschreckengaust @theumbrella1 @Vivekbhadauria1 @jesseturner21 @AlexanderRichey @kevin-orellana
/src/amazon-kendra-index-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @krokoko @scottschreckengaust
/src/amazon-keyspaces-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @jcshepherd
/src/amazon-mq-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @kenliao94 @hashimsharkh
/src/amazon-neptune-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @cornerwings @krlawrence
/src/amazon-qbusiness-anonymous-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @abhjaw
/src/amazon-qindex-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @tkoba-aws @akhileshamara
/src/amazon-sns-sqs-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @kenliao94 @hashimsharkh
/src/aurora-dsql-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @gxjx-x @anwesham-lab @benjscho @pkale @amaksimo @praba2210
/src/aws-api-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @awslabs/aws-api-mcp @rshevchuk-git @PCManticore @iddv @arnewouters @bidesh
/src/aws-appsync-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @phani-srikar @maxi114 @neelmurt
/src/aws-bedrock-custom-model-import-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @krokoko
/src/aws-bedrock-data-automation-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @krokoko @theagenticguy
/src/aws-dataprocessing-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @naikvaib @LiyuanLD @ckha2000 @raghav1397 @chappidim @yuxiaorun
/src/aws-diagram-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @MichaelWalker-git
/src/aws-documentation-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @Lavoiedavidw @JonLim @tuanknguyen @AadityaBhoota @artb30 @alexisareyn
/src/aws-healthomics-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @markjschreiber @WIIASD @a-li @alxawan @sabeelmansuri
/src/aws-iac-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @kdbrogan @vishaalmehrishi @aemada-aws @kumvprat
/src/aws-iot-sitewise-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @ychamare @ashuanand1226 @charlie-7 @ajain13
/src/aws-knowledge-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @FaresYoussef94 @animebar @zdwheels @nihal712 @forerocf @deepankanbn @GuXiangTS
/src/aws-location-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @scottschreckengaust @theagenticguy
/src/aws-msk-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @dingyiheng @mehbey @isaurab007
/src/aws-network-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @juhala-aws @NetDevAutomate
/src/aws-pricing-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @nspring00 @aytech-in @s12v
/src/aws-serverless-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @bx9900
/src/aws-support-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @Wook133
/src/bedrock-kb-retrieval-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @theagenticguy @pranjbh
/src/billing-cost-management-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @chittev @Rahul-1404
/src/ccapi-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers
/src/cdk-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @jimini55
/src/cfn-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @scottschreckengaust @krokoko
/src/cloudtrail-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @rokafella
/src/cloudwatch-applicationsignals-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @yiyuan-he @mxiamxia @syed-ahsan-ishtiaque @thpierce @vastin @wangzlei @shiyangy-xray
/src/cloudwatch-appsignals-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @yiyuan-he @mxiamxia @iismd17 @syed-ahsan-ishtiaque @thpierce
/src/cloudwatch-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @gcacace @shri-tambe @agiuliano @goranmod
/src/code-doc-gen-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @jimini55
/src/core-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @PaulVincent707
/src/cost-explorer-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers
/src/document-loader-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @andywidjaja @hvital @HaoOliv
/src/documentdb-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @theagenticguy
/src/dynamodb-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @akeyesamzn @ysunio @LeeroyHannigan @amzn-erdemkemer
/src/ecs-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @guitar80ep @matthewgoodman13 @nineonine @biagic @tusharbabbar @lewisct
/src/eks-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @patrick-yu-amzn @srhsrhsrhsrh
/src/elasticache-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers
/src/finch-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @Shubhranshu153 @pendo324
/src/frontend-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @jimini55
/src/git-repo-research-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @krokoko @theagenticguy
/src/healthimaging-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @manish364
/src/healthlake-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @aws-steve @awsri
/src/iam-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @oshardik
/src/lambda-tool-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @danilop @jsamuel1
/src/mcp-lambda-handler @awslabs/mcp-admins @awslabs/mcp-maintainers @mikegc-aws @Lukas-Xue
/src/memcached-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers
/src/mysql-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @kennthhz
/src/nova-canvas-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @theagenticguy
/src/openapi-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @prajwalendra
/src/postgres-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @kennthhz @thephantomthief
/src/prometheus-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @MohamedSherifAbdelsamiea
/src/redshift-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @grayhemp @saeedma8
/src/s3-tables-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @gsoundar @gregorywright @Kurtiscwright @ananthaksr @okhomin @Zh111602
/src/sagemaker-ai-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @dparkar @githuboston @jade710 @JunqiYe
/src/sagemaker-unified-studio-spark-upgrade-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @naikvaib @LiyuanLD @ckha2000 @raghav1397 @chappidim @yuxiaorun
/src/sagemaker-unified-studio-spark-troubleshooting-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @naikvaib @LiyuanLD @ckha2000 @raghav1397 @chappidim @yuxiaorun
/src/stepfunctions-tool-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @mmouniro
/src/syntheticdata-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @pranjbh
/src/terraform-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @scottschreckengaust
/src/timestream-for-influxdb-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @lokendrp-aws
/src/valkey-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers
/src/well-architected-security-mcp-server @awslabs/mcp-admins @awslabs/mcp-maintainers @juntinyeh
## Samples
## Secure the CODEOWNERS file
/.github/CODEOWNERS @awslabs/mcp-admins
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
---
name: "🐛 Bug Report"
description: Report a bug
title: "(module name): (short issue description)"
labels: [bug, needs-triage]
assignees: []
body:
- type: textarea
id: description
attributes:
label: Describe the bug
description: What is the problem? A clear and concise description of the bug.
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected Behavior
description: |
What did you expect to happen?
validations:
required: true
- type: textarea
id: current
attributes:
label: Current Behavior
description: |
What actually happened?
Please include full errors, uncaught exceptions, stack traces, and relevant logs.
If service responses are relevant, please include wire logs.
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Reproduction Steps
description: |
Provide a self-contained, concise snippet of code that can be used to reproduce the issue.
For more complex issues provide a repo with the smallest sample that reproduces the bug.
Avoid including business logic or unrelated code, it makes diagnosis more difficult.
The code sample should be an SSCCE. See http://sscce.org/ for details. In short, please provide a code sample that we can copy/paste, run and reproduce.
validations:
required: true
- type: textarea
id: solution
attributes:
label: Possible Solution
description: |
Suggest a fix/reason for the bug
validations:
required: false
- type: textarea
id: context
attributes:
label: Additional Information/Context
description: |
Anything else that might be relevant for troubleshooting this bug. Providing context helps us come up with a solution that is most useful in the real world.
validations:
required: false
- type: input
id: operating-system
attributes:
label: OS
validations:
required: true
- type: dropdown
id: server
attributes:
label: Server
multiple: true
options:
- aws-api-mcp-server
- amazon-kendra-index-mcp-server
- amazon-mq-mcp-server
- amazon-neptune-mcp-server
- amazon-sns-sqs-mcp-server
- amazon-dsql-mcp-server
- aws-diagram-mcp-server
- aws-documentation-mcp-server
- aws-location-mcp-server
- aws-pricing-mcp-server
- bedrock-kb-retrieval-mcp-server
- cdk-mcp-server
- cfn-mcp-server
- code-doc-gen-mcp-server
- core-mcp-server
- documentdb-mcp-server
- dynamodb-mcp-server
- frontend-mcp-server
- git-repo-research-mcp-server
- lambda-mcp-server
- mcp-lambda-handler
- memcached-mcp-server
- mysql-mcp-server
- nova-canvas-mcp-server
- postgres-mcp-server
- syntheticdata-mcp-server
- terraform-mcp-server
- valkey-mcp-server
- other
validations:
required: true
- type: input
id: server-version
attributes:
label: Server Version
validations:
required: false
- type: input
id: region
attributes:
label: Region experiencing the issue
description: For instance, us-east-1
validations:
required: true
- type: textarea
id: other
attributes:
label: Other information
description: |
e.g. detailed explanation, stacktraces, related issues, suggestions how to fix, links for us to have context, eg. associated pull-request, stackoverflow, slack, etc
validations:
required: false
- type: checkboxes
attributes:
label: Service quota
description: Have you checked your [service quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) for the services this sample uses?
options:
- label: I have reviewed the service quotas for this construct
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/documentation.yml
================================================
---
name: "📕 Documentation Issue"
description: Report an issue in the API Reference documentation or Developer Guide
title: "(module name): (short issue description)"
labels: [documentation, needs-triage]
assignees: []
body:
- type: textarea
id: description
attributes:
label: Describe the issue
description: A clear and concise description of the issue.
validations:
required: true
- type: textarea
id: links
attributes:
label: Links
description: |
Include links to affected documentation page(s).
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
---
name: 🚀 Feature Request
description: Suggest an idea for this project
title: "(module name): (short issue description)"
labels: [feature-request, needs-triage]
assignees: []
body:
- type: textarea
id: description
attributes:
label: Describe the feature
description: A clear and concise description of the feature you are proposing.
validations:
required: true
- type: textarea
id: use-case
attributes:
label: Use Case
description: |
Why do you need this feature? For example: "I'm always frustrated when..."
validations:
required: true
- type: textarea
id: solution
attributes:
label: Proposed Solution
description: |
Suggest how to implement the addition or change. Please include prototype/workaround/sketch/reference implementation.
validations:
required: false
- type: textarea
id: other
attributes:
label: Other Information
description: |
Any alternative solutions or features you considered, a more detailed explanation, stack traces, related issues, links for context, etc.
validations:
required: false
- type: checkboxes
id: ack
attributes:
label: Acknowledgements
options:
- label: I may be able to implement this feature request
required: false
- label: This feature might incur a breaking change
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/rfc.yml
================================================
name: 🚧 Request for Comments (RFC)
description: Feature design and detailed proposals
title: "RFC: TITLE"
labels: ["RFC-proposal", "needs-triage"]
body:
- type: markdown
attributes:
value: |
Thank you for submitting a RFC. Please add as many details as possible to help further enrich this design.
- type: input
id: relation
attributes:
label: Is this related to an existing feature request or issue?
description: Please share a link, if applicable
- type: textarea
id: summary
attributes:
label: Summary
description: Please provide an overview in one or two paragraphs
validations:
required: true
- type: textarea
id: problem
attributes:
label: Use case
description: Please share the use case and motivation behind this proposal
validations:
required: true
- type: textarea
id: proposal
attributes:
label: Proposal
description: Please explain the design in detail, so anyone familiar with the project could implement it
placeholder: What the user experience looks like before and after this design?
validations:
required: true
- type: textarea
id: scope
attributes:
label: Out of scope
description: Please explain what should be considered out of scope in your proposal
validations:
required: true
- type: textarea
id: challenges
attributes:
label: Potential challenges
description: Nothing is perfect. Please share what common challenges, edge cases, unresolved areas, and suggestions on how to mitigate them
validations:
required: true
- type: textarea
id: integrations
attributes:
label: Dependencies and Integrations
description: If applicable, please share whether this feature has additional dependencies, and how it might integrate with other utilities available
validations:
required: false
- type: textarea
id: alternatives
attributes:
label: Alternative solutions
description: Please describe what alternative solutions to this use case, if any
render: markdown
validations:
required: false
- type: markdown
attributes:
value: |
---
**Disclaimer**: We value your time and bandwidth. As such, any pull requests created on non-triaged issues might not be successful.
Metadata information for admin purposes, please leave them empty.
* RFC PR:
* Approved by: ''
* Reviewed by: ''
================================================
FILE: .github/ISSUE_TEMPLATE/support_awslabs_mcp_servers.yml
================================================
name: 💞 Support Awslabs MCP Servers (become a reference)
description: Add your organization's name or logo to the Awslabs MCP Servers documentation
title: "[Support Awslabs MCP Servers]: <your organization name>"
labels: ["customer-reference"]
body:
- type: markdown
attributes:
value: |
Thank you for becoming a reference customer. Your support means a lot to us. It also helps new customers to know who's using it.
If you would like us to also display your organization's logo, please share a link in the `Company logo` field.
- type: input
id: organization
attributes:
label: Organization Name
description: Please share the name of your organization
placeholder: ACME
validations:
required: true
- type: input
id: name
attributes:
label: Your Name
description: Please share your name
validations:
required: true
- type: input
id: job
attributes:
label: Your current position
description: Please share your current position at your company
validations:
required: true
- type: input
id: logo
attributes:
label: (Optional) Company logo
description: Company logo you want us to display. You also allow us to resize for optimal placement in the documentation.
validations:
required: false
- type: textarea
id: use_case
attributes:
label: (Optional) Use case
description: How are you using Awslabs MCP Servers today? *features, etc.*
validations:
required: false
- type: checkboxes
id: languages
attributes:
label: What servers are you using from Awslabs MCP Servers?
options:
- label: aws-api-mcp-server
required: false
- label: aws-diagram-mcp-server
required: false
- label: aws-documentation-mcp-server
required: false
- label: bedrock-kb-retrieval-mcp-server
required: false
- label: cdk-mcp-server
required: false
- label: core-mcp-server
required: false
- label: aws-pricing-mcp-server
required: false
- label: git-repo-research-msp-server
required: false
- label: lambda-mcp-server
required: false
- label: nova-canvas-mcp-server
required: false
- label: terraform-mcp-server
required: false
- type: markdown
attributes:
value: |
*By raising a Support Awslabs MCP Servers issue, you are granting AWS permission to use your company's name (and/or logo) for the limited purpose described here. You are also confirming that you have authority to grant such permission.*
*You can opt-out at any time by commenting or reopening this issue.*
================================================
FILE: .github/SECURITY
================================================
Reporting a Vulnerability
If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our vulnerability reporting page or directly via email to aws-security@amazon.com.
!!! IMPORTANT !!! Please do not create a GitHub issue, pull request, or other public annoucements.
================================================
FILE: .github/SUPPORT
================================================
# Level of Effort
We use GitHub to communicate and support this repository.
If you need help, please create and issue.
================================================
FILE: .github/actions/build-and-push-container-image/action.yml
================================================
---
# This local action builds an image and pushes it to registries
name: "Build and push image"
author: "AWS Labs MCP"
description: "Builds an image and pushes it to registries"
# USAGE
#
# - name: Build and Push Container Image
# id: build-and-push-container-image
# uses: ./.github/actions/build-and-push-container-image
# with:
# image: "core-mcp-server"
# version: "0.0.0"
# - name: Step to demonstrate how to access outputs (no need for this)
# id: echo-output
# run: |
# echo "version: ${VERSION}"
# env:
# VERSION: ${{ steps.build-and-push-container-image.outputs.version}}
branding:
# https://feathericons.com/
icon: 'anchor' # for shipping container ¯\_(ツ)_/¯
color: 'purple'
inputs:
image:
description: 'The image'
type: string
required: true
version:
default: ''
description: 'The version to associate to the image'
type: string
required: false
public-erc-role-to-assume:
description: 'The public ECR role to use to push the image'
type: string
required: true
public-erc-registry-alias:
description: 'The registry alias'
type: string
required: true
public-erc-aws-region:
default: 'us-east-1'
description: 'The region to login'
type: string
required: false
outputs:
version:
description: 'The version uploaded'
value: ${{ steps.get-version.outputs.version }}
artifact:
description: 'The artifact uploaded'
value: ${{ steps.upload-image.outputs.artifact-id }}
runs:
using: "composite"
steps:
- name: Docker meta
id: meta
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0
with:
images: |
public.ecr.aws/${{ inputs.public-erc-registry-alias }}/${{ github.repository_owner }}/${{ inputs.image }}
# Disable all but the raw and sha
tags: |
type=schedule,enable=false
type=semver,pattern={{raw}},enable=false
type=pep440,pattern={{raw}},enable=false
type=match,pattern=(.*),group=1,enable=false
type=edge,enable=false
type=ref,event=branch,enable=false
type=ref,event=tag,enable=false
type=ref,event=pr,enable=false
type=sha,format=long,enable=true
type=raw,value=latest,enable=true
type=raw,value=${{ inputs.version || github.sha }},enable=${{ (inputs.version && true) || 'false' }}
labels: |
maintainer=AWSLabs MCP
org.opencontainers.image.description=AWS Labs ${{ inputs.image }} MCP Server
org.opencontainers.image.source=https://github.com/awslabs/mcp/tree/main/src/${{ inputs.image }}
org.opencontainers.image.title=awslabs.${{ inputs.image }}
org.opencontainers.image.url=https://github.com/awslabs/mcp/tree/main/src/${{ inputs.image }}
org.opencontainers.image.version=${{ inputs.version || github.sha }}
org.opencontainers.image.vendor=Amazon Web Service, Inc.
- name: Setup AWS Credentials
id: setup-aws-credentials
uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0
with:
role-to-assume: ${{ inputs.public-erc-role-to-assume }}
aws-region: ${{ inputs.public-erc-aws-region }}
role-duration-seconds: 7200
role-session-name: GitHubActions${{ github.run_id }}
mask-aws-account-id: true
- name: Login to Public ECR
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
with:
registry: public.ecr.aws
- name: Set up QEMU
id: setup-qemu
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
- name: Set up Docker Buildx
id: setup-buildx
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
with:
buildkitd-flags: --debug
- name: Build and push by digest
id: build
uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6.16.0
with:
platforms: 'linux/amd64,linux/arm64' # add more platforms after testing completed
labels: ${{ steps.meta.outputs.labels }}
tags: public.ecr.aws/${{ inputs.public-erc-registry-alias }}/${{ github.repository_owner }}/${{ inputs.image }}
context: ./src/${{ inputs.image }}
file: ./src/${{ inputs.image }}/Dockerfile
push: true
outputs: type=image,push-by-digest=true,name-canonical=true,push=true
cache-from: type=gha
cache-to: type=gha,mode=max
github-token: ${{ inputs.github-container-registry-token }}
- name: Export digest
run: |
mkdir -p ${{ runner.temp }}/digests/${{ inputs.image }}
digest="${{ steps.build.outputs.digest }}"
touch "${{ runner.temp }}/digests/${{ inputs.image }}/${digest#sha256:}"
shell: bash
- name: Upload digest
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: digests-${{ inputs.image }}
path: ${{ runner.temp }}/digests/${{ inputs.image }}/*
if-no-files-found: error
retention-days: 1
- name: Create manifest list and push
working-directory: ${{ runner.temp }}/digests/${{ inputs.image }}
env:
IMAGE: ${{ inputs.image }}
ALIAS: ${{ inputs.public-erc-registry-alias }}
OWNER: ${{ github.repository_owner }}
run: |
echo "DOCKER_METADATA_OUTPUT_JSON=$DOCKER_METADATA_OUTPUT_JSON"
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf 'public.ecr.aws/'$ALIAS'/'$OWNER'/'$IMAGE'@sha256:%s ' *)
shell: bash
- name: Inspect image
env:
IMAGE: ${{ inputs.image }}
ALIAS: ${{ inputs.public-erc-registry-alias }}
OWNER: ${{ github.repository_owner }}
VERSION: ${{ steps.meta.outputs.version }}
run: |
docker buildx imagetools inspect public.ecr.aws/$ALIAS/$OWNER/$IMAGE:$VERSION
shell: bash
- name: Get version
id: get-version
working-directory: ${{ env.GITHUB_WORKSPACE }}
run: |
echo version="${{ steps.meta.outputs.version }}" >>"$GITHUB_OUTPUT"
shell: bash
================================================
FILE: .github/actions/clear-space-ubuntu-latest-agressively/action.yml
================================================
---
# This local action builds an image and pushes it to registries
name: "Clear Space in Ubuntu Latest Agressively"
author: "AWS Labs MCP"
description: "Clears space in Ubuntu latest images aggressively so GitHub Runner has a less chance from running out of space"
# USAGE
#
# - id: clear-space
# uses: ./.github/actions/clear-space-ubuntu-latest-agressively
# - name: Step to demonstrate how to access outputs (no need for this)
# id: echo-output
# run: |
# echo "before: ${BEFORE}"
# echo "after: ${AFTER}"
# env:
# BEFORE: ${{ steps.clear-space.outputs.before}}
# AFTER: ${{ steps.clear-space.outputs.after}}
branding:
# https://feathericons.com/
icon: 'activity' # for shipping container ¯\_(ツ)_/¯
color: 'yellow'
outputs:
after:
description: 'Space after clearing'
value: ${{ steps.after.outputs.space }}
before:
description: 'Space before clearing'
value: ${{ steps.before.outputs.space }}
runs:
using: "composite"
steps:
- name: Space Before
id: before
run: |
df -h
du -h -k -d 1
echo space="$(df --output=avail . | grep -v Avail)" >>"$GITHUB_OUTPUT"
shell: bash
- name: Clear Up Space (Agressively) to Minimize Chances of Running Out of Space
shell: bash
run: |
sudo rm -rf \
/usr/local/lib/android \
/usr/share/dotnet \
/opt/ghc \
/usr/local/.ghcup \
/usr/local/share/powershell \
/usr/share/swift \
/usr/lib/jvm || true
printWarningMessage () {
echo "[warning] Failed to remove '$1', perhaps because it doesn't exist. Ignoring..."
}
# Remove large packages we don't use.
sudo apt list --installed
sudo apt-get remove -y '^mysql-.*' || printWarningMessage '^mysql-.*'
sudo apt-get remove -y '^dotnet-.*' --fix-missing || printWarningMessage '^dotnet-.*'
sudo apt-get remove -y 'php.*' --fix-missing || printWarningMessage 'php.*'
sudo apt-get remove -y '^mongodb-.*' --fix-missing || printWarningMessage '^mongodb-.*'
sudo apt-get remove -y '^llvm-.*' --fix-missing || printWarningMessage '^llvm-.*'
sudo apt-get remove -y google-cloud-sdk --fix-missing || printWarningMessage 'google-cloud-sdk'
sudo apt-get remove -y google-cloud-cli --fix-missing || printWarningMessage 'google-cloud-cli'
sudo apt-get autoremove -y >/dev/null 2>&1
sudo apt-get autoclean -y >/dev/null 2>&1
df -h
du -h -k -d 1
- name: Space After
id: after
run: |
df -h
du -h -k -d 1
echo space="$(df --output=avail . | grep -v Avail)" >>"$GITHUB_OUTPUT"
shell: bash
================================================
FILE: .github/codecov.yml
================================================
coverage:
status:
project:
default: # default is the status check's name, not default settings
threshold: 1.0 # due to an occasional codecov reporting descrapancy
comment:
require_changes: "coverage_drop"
================================================
FILE: .github/dependabot.yml
================================================
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
# Ensure the file passes validation:
# ```shell
# % npx @bugron/validate-dependabot-yaml .github/dependabot.yml
# ```
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
commit-message:
prefix: "chore(deps): update github-actions"
groups:
github-actions-version-updates:
patterns:
- "*"
- package-ecosystem: "uv"
directories:
- "**/*"
schedule:
interval: "weekly"
commit-message:
prefix: "chore(deps): update uv"
groups:
uv-version-updates:
patterns:
- "*"
- package-ecosystem: "npm"
directories:
- "**/*"
schedule:
interval: "weekly"
commit-message:
prefix: "chore(deps): update npm"
groups:
npm-version-updates:
patterns:
- "*"
- package-ecosystem: "docker"
directories:
- "**/*"
schedule:
interval: "weekly"
commit-message:
prefix: "chore(deps): update docker images"
groups:
docker-version-updates:
patterns:
- "*"
================================================
FILE: .github/pull_request_template.md
================================================
<!-- markdownlint-disable MD041 MD043 -->
Fixes
## Summary
### Changes
> Please provide a summary of what's being changed
### User experience
> Please share what the user experience looks like before and after this change
## Checklist
If your change doesn't seem to apply, please leave them unchecked.
* [ ] I have reviewed the [contributing guidelines](https://github.com/awslabs/mcp/blob/main/CONTRIBUTING.md)
* [ ] I have performed a self-review of this change
* [ ] Changes have been tested
* [ ] Changes are documented
Is this a breaking change? (Y/N)
**RFC issue number**:
Checklist:
* [ ] Migration process documented
* [ ] Implement warnings (if it can live side by side)
## Acknowledgment
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of the [project license](https://github.com/awslabs/mcp/blob/main/LICENSE).
================================================
FILE: .github/workflows/RELEASE_INSTRUCTIONS.md
================================================
# Release Instructions
IMPORTANT: A release will be made for all packages with changes since the last published release
## Prerequisites
* GitHub CLI, `gh`
* JSON processor, `jq`
* Have `write` access to the repository, to request a workflow
## Instructions
There are three roles, "Requestor", "Code Owner Reviewer", and "Repository Owner".
### Requestor
Run through this process when you want to cut a release.
1. (OPTIONAL) See what changes will be processed from what is in the default `main` compared to the latest published release.
```bash
git pull origin
LATEST_TAGGED_VERSION="$(gh release list --repo awslabs/mcp --limit 1 --exclude-drafts --exclude-pre-releases --json tagName | jq -r '.[0].tagName')"; git diff "${LATEST_TAGGED_VERSION}"...remotes/origin/main --name-only
```
1. Run the [Release Branch (initiated)](https://github.com/awslabs/mcp/actions/workflows/release-initiate-branch.yml) GitHub Workflow:
* Use the GitHub Web and `Run worklow` on the default `main` branch
or
* Run this GitHub CLI:
```bash
gh workflow run --repo awslabs/mcp --ref main release-initiate-branch.yml
```
1. (RECOMMENDED) Set the resulting pull request to `Merge when ready`
1. Wait for merge to be unblocked and `Merge when ready`
* code owner review approvals
* required workflows successful
* no merbge conflicts
* updated branch
* etc.
### Code Owner Reviewer
The pull request generated by the requestor, still takes two parties to approve (from `CODEOWNERS`) to ensure all packages are approved.
_NOTE: The requestor may be a valid approver due to automation cutting the release branch and pull request._
1. Review Assigned `chore: release/<YYYY.MM.YYYYMMDDhhmmss>` Pull Requests
* `Approve`
* `Comment`
* `Request changes`
* abstain - unless you are a blocker
### Repository Owner
A successful merge will start a release, and requires approval for the deployment.
_NOTE: The requestor and code owners may be valid due to automation tagging the default branch._
1. Approve or Reject [Release Deploy (approvals)](https://github.com/awslabs/mcp/actions/workflows/release.yml) Deployment Requests
or run some GitHub CLI commands:
```shell
$ gh run list --workflow=release.yml --branch <YYYY.MM.YYYYMMDDhhmmss> --status waiting --json databaseId | jq '.[].databaseId'
<UNIQUE_NUMBER>
# Review the Run
$ gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/awslabs/mcp/actions/runs/<UNIQUE_NUMBER>/pending_deployments -F "environment_ids[]=$(gh api --method GET -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" /repos/awslabs/mcp/environments | jq '.environments[] | select (.name == "release") | .id')" -f "state=approved" -f "comment=release"
```
## Workflow
Here is a diagram of the flow:
```mermaid
flowchart TD
A((👤 Manual Trigger<br/>workflow_dispatch)) --> B["🔍 <a href="https://github.com/awslabs/mcp/actions/workflows/release-initiate-branch.yml">Release Branch</a><br/>Find changed directories<br/>since last release"]
B --> C{Changes<br/>detected?}
C -->|No| D((❌ End - No changes))
C -->|Yes| E["🌿 Create release branch<br/><i>release/YYYY.MM.YYYYMMDDHHIISS</i>"]
E --> F[📦 Bump package versions<br/>in changed directories]
F --> G[📝 Create Pull Request<br/>to main branch]
G --> H{👤 PR merged<br/>to main?}
H -->|No| I(("⏳ Wait for PR review<br />or PR <b>Closed</b>"))
H -->|Other PR Merged| V((❌ Close the release))
H -->|Yes| J["🏷️ <a href="https://github.com/awslabs/mcp/actions/workflows/release-merge-tag.yml">Release Merged</a><br/>Create & push signed tag<br/><i>YYYY.MM.YYYYMMDDHHIISS</i>"]
J --> K[🚀 <a href="https://github.com/awslabs/mcp/actions/workflows/release.yml">Release Deploy</a><br/>Draft GitHub release]
K --> L[🔍 Find changed packages<br/>Python/Node/Docker]
L --> M{Packages to<br/>publish?}
M -->|No| N((📋 Publish final release<br />No packages))
M -->|Yes| O[👤 Wait for approval<br/>Protected environment]
O --> P{Approved?}
P -->|No| Q((❌ Release rejected))
P -->|Yes| R[📦 Build & publish packages<br/>PyPI, NPM, Docker ECR]
R --> S{Build<br/>successful?}
S -->|No| T((❌ Release failed))
S -->|Yes| U((✅ Publish final release<br/>GitHub Release))
%% Styling
classDef manual fill:#e1f5fe,stroke:#01579b,stroke-width:2px
classDef automated fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
classDef decision fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef success fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
classDef failure fill:#ffebee,stroke:#c62828,stroke-width:2px
class A,H,O manual
class B,E,F,G,J,K,L,R automated
class C,M,P,S decision
class N,U success
class D,I,Q,T failure
```
================================================
FILE: .github/workflows/aws-api-mcp-upgrade-version.yml
================================================
---
name: AWS API MCP Server - Upgrade AWS CLI Version
description: |
This workflow upgrades the AWS CLI version in src/aws-api-mcp-server using uv upgrade
and creates a pull request with the changes.
on:
workflow_dispatch:
schedule:
- cron: '0 5 * * *' # Daily at 6 AM Amsterdam time (UTC+1)
env:
BOT_USER_EMAIL: ${{ vars.BOT_USER_EMAIL || '203918161+awslabs-mcp@users.noreply.github.com' }}
BOT_USER_NAME: ${{ vars.BOT_USER_NAME || 'awslabs-mcp' }}
permissions:
actions: none
attestations: none
checks: none
contents: none
deployments: none
discussions: none
id-token: none
issues: none
models: none
packages: none
pages: none
pull-requests: none
repository-projects: none
security-events: none
statuses: none
jobs:
upgrade-awscli:
name: Upgrade AWS CLI Version
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
token: ${{ secrets.BOT_GITHUB_TOKEN }}
- name: Install uv
uses: astral-sh/setup-uv@eac588ad8def6316056a12d4907a9d4d84ff7a3b # v7.3.0
- name: Check and upgrade AWS CLI version
id: upgrade
working-directory: src/aws-api-mcp-server
run: |
set -euo pipefail
# Get current installed version
CURRENT_VERSION=$(uv run python -c "from importlib.metadata import version; print(version('awscli'))")
echo "::debug::Current AWS CLI version: $CURRENT_VERSION"
# Get latest version from PyPI
LATEST_VERSION=$(uv run --no-project python -c "import urllib.request, json; print(json.loads(urllib.request.urlopen('https://pypi.org/pypi/awscli/json').read())['info']['version'])")
echo "::debug::Latest AWS CLI version from PyPI: $LATEST_VERSION"
# Set version outputs
echo "current-version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
echo "latest-version=$LATEST_VERSION" >> $GITHUB_OUTPUT
# Compare versions
if [[ "$CURRENT_VERSION" == "$LATEST_VERSION" ]]; then
echo "has-changes=false" >> $GITHUB_OUTPUT
echo "::notice::AWS CLI is already up to date (version $CURRENT_VERSION)"
else
echo "has-changes=true" >> $GITHUB_OUTPUT
echo "::notice::Upgrading AWS CLI from $CURRENT_VERSION to $LATEST_VERSION"
# Remove existing awscli dependency
echo "::debug::Removing existing awscli dependency"
uv remove awscli
# Add new version with exact pinning
echo "::debug::Adding awscli==$LATEST_VERSION"
uv add "awscli==$LATEST_VERSION"
# Sync dependencies
echo "::debug::Syncing dependencies"
uv sync
echo "::debug::AWS CLI upgrade completed"
fi
- name: Create upgrade branch
if: steps.upgrade.outputs.has-changes == 'true'
id: create-branch
run: |
set -euo pipefail
LATEST_VERSION="${{ steps.upgrade.outputs.latest-version }}"
UPGRADE_BRANCH="upgrade/aws-api-mcp-awscli-v$LATEST_VERSION"
echo "::debug::Checking if upgrade branch exists: $UPGRADE_BRANCH"
# Check if branch already exists
if git ls-remote --heads origin "$UPGRADE_BRANCH" | grep -q "$UPGRADE_BRANCH"; then
echo "branch-created=false" >> $GITHUB_OUTPUT
echo "::notice::Branch $UPGRADE_BRANCH already exists, skipping creation"
else
echo "branch-created=true" >> $GITHUB_OUTPUT
echo "::debug::Creating upgrade branch: $UPGRADE_BRANCH"
# Configure git user
git config --local user.email "${{ env.BOT_USER_EMAIL }}"
git config --local user.name "${{ env.BOT_USER_NAME }}"
# Create and push branch
git checkout -b "$UPGRADE_BRANCH"
git push --set-upstream origin "$UPGRADE_BRANCH"
echo "::debug::Successfully created upgrade branch: $UPGRADE_BRANCH"
fi
echo "upgrade-branch=$UPGRADE_BRANCH" >> $GITHUB_OUTPUT
- name: Configure Git and GPG securely
if: steps.create-branch.outputs.branch-created == 'true'
env:
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
GPG_KEY_ID: ${{ secrets.GPG_KEY_ID }}
run: |
set -euo pipefail # SECURITY: Strict error handling
# Create secure temporary directory for GPG
export GNUPGHOME=$(mktemp -d)
chmod 700 "$GNUPGHOME"
echo "GNUPGHOME=$GNUPGHOME" >> $GITHUB_ENV
echo "::debug::Setting up secure GPG environment"
# Configure git user
git config --local user.email "${{ env.BOT_USER_EMAIL }}"
git config --local user.name "${{ env.BOT_USER_NAME }}"
# Import GPG key without exposing secrets in command line
echo "$GPG_PRIVATE_KEY" | gpg --batch --import --quiet
echo "$GPG_KEY_ID:6:" | gpg --import-ownertrust --quiet
# Configure git GPG settings
git config --global user.signingkey "$GPG_KEY_ID"
git config --global commit.gpgsign true
git config --global tag.gpgsign true
# Test GPG functionality
echo "test" | gpg --batch --yes --passphrase-fd 0 --pinentry-mode loopback \
--sign --armor --local-user "$GPG_KEY_ID" <<< "$GPG_PASSPHRASE" > /dev/null
echo "::debug::GPG configuration completed successfully"
- name: Commit and push changes
if: steps.create-branch.outputs.branch-created == 'true'
env:
GPG_KEY_ID: ${{ secrets.GPG_KEY_ID }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
run: |
set -euo pipefail
echo "::debug::Committing changes"
# Add only the source directory
git add src/aws-api-mcp-server/
# Cache GPG signature
echo "commit" | gpg --batch --yes --passphrase-fd 0 --pinentry-mode loopback \
--sign --armor --local-user "$GPG_KEY_ID" <<< "$GPG_PASSPHRASE" > /dev/null
# Create signed commit
git commit -m "chore(aws-api-mcp-server): upgrade AWS CLI to v${{ steps.upgrade.outputs.latest-version }}" --sign
# Pull with rebase to maintain linear history
git pull --rebase origin "${{ steps.create-branch.outputs.upgrade-branch }}"
# Push changes
git push origin "${{ steps.create-branch.outputs.upgrade-branch }}"
echo "::debug::Successfully committed and pushed changes"
- name: Create pull request
if: steps.create-branch.outputs.branch-created == 'true'
env:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
run: |
set -euo pipefail
UPGRADE_BRANCH="${{ steps.create-branch.outputs.upgrade-branch }}"
BASE_BRANCH="${{ github.ref_name }}"
echo "::debug::Creating PR from $UPGRADE_BRANCH to $BASE_BRANCH"
# Validate branch names
if [[ ! "$UPGRADE_BRANCH" =~ ^upgrade/aws-api-mcp-awscli-v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "::error::Invalid upgrade branch format: $UPGRADE_BRANCH" >&2
exit 1
fi
# Create PR with validated content
PR_URL="$(gh pr create \
--base "$BASE_BRANCH" \
--head "$UPGRADE_BRANCH" \
--title "chore(aws-api-mcp-server): upgrade AWS CLI to v${{ steps.upgrade.outputs.latest-version }}" \
--label "aws-api-mcp" \
--body "# AWS CLI Version Upgrade
This PR upgrades the AWS CLI version in the aws-api-mcp-server package.
## Changes
* Updated AWS CLI from **v${{ steps.upgrade.outputs.current-version }}** to **v${{ steps.upgrade.outputs.latest-version }}**
## Checklist
- [ ] Dependencies have been upgraded
- [ ] Lock file has been updated
- [ ] Tests pass with new versions
## Acknowledgment
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of the [project license](https://github.com/awslabs/mcp/blob/main/LICENSE).")"
echo "::debug::Successfully created pull request $PR_URL"
echo "### :arrow_up: AWS CLI Upgrade Ready" >> $GITHUB_STEP_SUMMARY
echo "Pull request $PR_URL created for [$UPGRADE_BRANCH](https://github.com/${{ github.repository }}/tree/$UPGRADE_BRANCH) branch" >> $GITHUB_STEP_SUMMARY
- name: Secure GPG cleanup
if: always()
run: |
set +e # Don't fail on cleanup errors
echo "::debug::Performing secure cleanup"
if [[ -n "${GNUPGHOME:-}" && -d "$GNUPGHOME" ]]; then
rm -rf "$GNUPGHOME"
echo "::debug::Cleaned up GPG directory"
fi
gpgconf --kill gpg-agent 2>/dev/null || true
unset GPG_PRIVATE_KEY GPG_PASSPHRASE GPG_KEY_ID GNUPGHOME 2>/dev/null || true
echo "::debug::Secure cleanup completed"
================================================
FILE: .github/workflows/bandit-requirements.txt
================================================
# This file was autogenerated by uv via the following command:
# uv pip compile --no-cache --universal --generate-hashes --annotate --allow-unsafe --output-file .github/workflows/bandit-requirements.txt .github/workflows/bandit-requirements.in
bandit==1.8.5 \
--hash=sha256:cb2e57524e99e33ced48833c6cc9c12ac78ae970bb6a450a83c4b506ecc1e2f9 \
--hash=sha256:db812e9c39b8868c0fed5278b77fffbbaba828b4891bc80e34b9c50373201cfd
# via -r .github/workflows/bandit-requirements.in
colorama==0.4.6 ; sys_platform == 'win32' \
--hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
--hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
# via bandit
markdown-it-py==3.0.0 \
--hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \
--hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb
# via rich
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
# via markdown-it-py
pbr==6.1.1 \
--hash=sha256:38d4daea5d9fa63b3f626131b9d34947fd0c8be9b05a29276870580050a25a76 \
--hash=sha256:93ea72ce6989eb2eed99d0f75721474f69ad88128afdef5ac377eb797c4bf76b
# via stevedore
pygments==2.19.2 \
--hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \
--hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b
# via rich
pyyaml==6.0.2 \
--hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \
--hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \
--hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \
--hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \
--hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \
--hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \
--hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \
--hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \
--hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \
--hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \
--hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \
--hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \
--hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \
--hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \
--hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \
--hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \
--hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \
--hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \
--hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \
--hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \
--hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \
--hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \
--hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \
--hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \
--hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \
--hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \
--hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \
--hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \
--hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \
--hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \
--hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \
--hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \
--hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \
--hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \
--hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \
--hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \
--hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \
--hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \
--hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \
--hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \
--hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \
--hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \
--hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \
--hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \
--hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \
--hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \
--hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \
--hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \
--hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \
--hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \
--hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \
--hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \
--hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4
# via bandit
rich==14.0.0 \
--hash=sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0 \
--hash=sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725
# via bandit
setuptools==80.9.0 \
--hash=sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922 \
--hash=sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c
# via pbr
stevedore==5.4.1 \
--hash=sha256:3135b5ae50fe12816ef291baff420acb727fcd356106e3e9cbfa9e5985cd6f4b \
--hash=sha256:d10a31c7b86cba16c1f6e8d15416955fc797052351a56af15e608ad20811fcfe
# via bandit
tomli==2.2.1 ; python_full_version < '3.11' \
--hash=sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6 \
--hash=sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd \
--hash=sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c \
--hash=sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b \
--hash=sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8 \
--hash=sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6 \
--hash=sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77 \
--hash=sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff \
--hash=sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea \
--hash=sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192 \
--hash=sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249 \
--hash=sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee \
--hash=sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4 \
--hash=sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98 \
--hash=sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8 \
--hash=sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4 \
--hash=sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281 \
--hash=sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744 \
--hash=sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69 \
--hash=sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13 \
--hash=sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140 \
--hash=sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e \
--hash=sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e \
--hash=sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc \
--hash=sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff \
--hash=sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec \
--hash=sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2 \
--hash=sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222 \
--hash=sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106 \
--hash=sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272 \
--hash=sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a \
--hash=sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7
# via bandit
typing-extensions==4.14.0 \
--hash=sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4 \
--hash=sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af
# via
# -r .github/workflows/bandit-requirements.in
# rich
================================================
FILE: .github/workflows/bandit.yml
================================================
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# Bandit is a security linter designed to find common security issues in Python code.
# This action will run Bandit on your codebase.
# The results of the scan will be found under the Security tab of your repository.
# https://github.com/marketplace/actions/bandit-scan is ISC licensed, by abirismyname
# https://pypi.org/project/bandit/ is Apache v2.0 licensed, by PyCQA
name: Bandit
on:
push:
branches: [ "main" ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ "main" ]
schedule:
- cron: '38 6 * * 2'
permissions: {}
jobs:
bandit:
permissions:
contents: read # for actions/checkout to fetch code
security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
- name: Bandit Scan
uses: shundor/python-bandit-scan@ab1d87dfccc5a0ffab88be3aaac6ffe35c10d6cd
with: # optional arguments
# exit with 0, even with results found
exit_zero: true # optional, default is DEFAULT
# Github token of the repository (automatically created by Github)
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information.
# File or directory to run bandit on
# path: # optional, default is .
# Report only issues of a given severity level or higher. Can be LOW, MEDIUM or HIGH. Default is UNDEFINED (everything)
# level: # optional, default is UNDEFINED
# Report only issues of a given confidence level or higher. Can be LOW, MEDIUM or HIGH. Default is UNDEFINED (everything)
# confidence: # optional, default is UNDEFINED
# comma-separated list of paths (glob patterns supported) to exclude from scan (note that these are in addition to the excluded paths provided in the config file) (default: .svn,CVS,.bzr,.hg,.git,__pycache__,.tox,.eggs,*.egg)
excluded_paths: tests,.venv
# comma-separated list of test IDs to skip
# skips: # optional, default is DEFAULT
# path to a .bandit file that supplies command line arguments
# ini_path: # optional, default is DEFAULT
================================================
FILE: .github/workflows/cfn_nag.yml
================================================
name: cfn_nag
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "main" branch
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
permissions: {}
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "scan"
scan:
permissions:
contents: read # for actions/checkout to fetch code
security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so follow-up steps can access it
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
- name: Simple test
uses: stelligent/cfn_nag@8b5f03da74202ba323a145e9d037ddce6cab9dec
with:
input_path: .
extra_args: -o sarif -g
output_path: cfn_nag.sarif
- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@c0fc915677567258ee3c194d03ffe7ae3dc8d741 # v4.31.9
# Results are generated only on a success or failure
# this is required since GitHub by default won't run the next step
# when the previous one has failed. Security checks that do not pass will 'fail'.
# An alternative is to add `continue-on-error: true` to the previous step
# Or 'soft_fail: true' to checkov.
if: success() || failure()
with:
sarif_file: cfn_nag.sarif
================================================
FILE: .github/workflows/check-gh-pages-builds.yml
================================================
name: Check that GitHub Pages Builds
permissions: {}
on:
push:
pull_request:
branches:
- main
jobs:
build:
name: Build Docusaurus
permissions:
contents: read
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: 22
cache: npm
cache-dependency-path: 'docusaurus/package-lock.json'
- name: Install dependencies
run: cd docusaurus && npm ci
- name: Build website
run: cd docusaurus && npm run build
================================================
FILE: .github/workflows/check-license-header-hash.txt
================================================
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
================================================
FILE: .github/workflows/check-license-header-slash.txt
================================================
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
================================================
FILE: .github/workflows/check-license-header.json
================================================
[
{
"exclude": [
"**/tests/**",
".venv/**",
"venv/**",
"**/venv/**",
"**/*venv/**",
"**/site-packages/**",
".github/**",
"docusaurus/**",
"docs/**",
"**/*requirements.txt",
"**/*.pyc",
"**/trivy-results.sarif",
"**/py.typed",
"**/*.npz",
"**/*.template",
"**/*.java",
"**/*.js",
"**/*.ts",
"**/*.cs",
"**/*.properties",
"**/*.xml",
"**/dist/**"
],
"include": [
"**/*.py",
"**/*Dockerfile",
"**/*.sh",
"**/*.guard",
"**/ruff.toml"
],
"license": "./.github/workflows/check-license-header-hash.txt"
},
{
"exclude": [
"docusaurus/**"
],
"include": [
"**/*.java",
"**/*.js",
"**/*.ts",
"**/*.cs"
],
"license": "./.github/workflows/check-license-header-slash.txt"
},
{
"include": [
"**/*.md",
"**/LICENSE",
"**/NOTICE",
"**/uv.lock",
"**/pyproject.toml",
"**/*.yaml",
"**/*.yml",
"**/*.png",
"**/*.gif",
"**/*.json",
"**/*.j2",
"**/tests/**",
".venv/**",
".github/**",
"docs/**",
"docusaurus/**",
"**/*requirements.txt",
"**/*.js",
"**/*.html",
"**/*.tsx",
"**/*.ts",
"**/*.css",
"**/*.module.css",
"**/yarn.lock",
"**/*.pyc",
"**/trivy-results.sarif",
"**/py.typed",
"**/*.npz",
"**/*.template",
"**/*.properties",
"**/*.xml",
"**/dist/**",
"**/skills/*/scripts",
"**/skills/*/references",
"**/skills/*/mcp",
"**/DO_NOT_RELEASE"
]
}
]
================================================
FILE: .github/workflows/check-license-header.yml
================================================
# This workflow runs an automated pull request code review when labeled
name: Check License Header
on:
push:
workflow_dispatch:
permissions: {}
jobs:
precheck:
name: Code Review Upon All Successful Runs
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Check license headers
uses: viperproject/check-license-header@e06c65614fa9f32e099838df4dd25440c5344b32 # v2.0.3
with:
path: .
config: ./.github/workflows/check-license-header.json
strict: true
================================================
FILE: .github/workflows/checkov.yml
================================================
name: checkov
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "main" branch
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
permissions: {}
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "scan"
scan:
permissions:
contents: read # for actions/checkout to fetch code
security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so follow-up steps can access it
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
- name: Checkov GitHub Action
uses: bridgecrewio/checkov-action@f99709f8ccc3496220c987b7d8729653237c23dc # v12.3086.0
with:
# This will add both a CLI output to the console and create a results.sarif file
output_format: cli,sarif
output_file_path: console,results.sarif
- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@c0fc915677567258ee3c194d03ffe7ae3dc8d741 # v4.31.9
# Results are generated only on a success or failure
# this is required since GitHub by default won't run the next step
# when the previous one has failed. Security checks that do not pass will 'fail'.
# An alternative is to add `continue-on-error: true` to the previous step
# Or 'soft_fail: true' to checkov.
if: success() || failure()
with:
sarif_file: results.sarif
================================================
FILE: .github/workflows/codeql.yml
================================================
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL Advanced"
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
schedule:
- cron: '20 8 * * 3'
permissions: {}
jobs:
analyze:
name: Analyze (${{ matrix.language }})
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
permissions:
# required for all workflows
security-events: write
# required to fetch internal or private CodeQL packs
packages: read
# only required for workflows in private repositories
actions: read
contents: read
strategy:
fail-fast: false
matrix:
include:
- language: actions
build-mode: none
- language: python
build-mode: none
# When TypeScript is enabled, uncomment below
# - language: javascript-typescript
# build-mode: none
# CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
# Use `c-cpp` to analyze code written in C, C++ or both
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
# Add any setup steps before running the `github/codeql-action/init` action.
# This includes steps like installing compilers or runtimes (`actions/setup-node`
# or others). This is typically only required for manual builds.
# - name: Setup runtime (example)
# uses: actions/setup-example@v1
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@c0fc915677567258ee3c194d03ffe7ae3dc8d741 # v4.31.9
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# If the analyze step fails for one of the languages you are analyzing with
# "We were unable to automatically build your code", modify the matrix above
# to set the build mode to "manual" for that language. Then modify this step
# to build your code.
# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- if: matrix.build-mode == 'manual'
shell: bash
run: |
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
echo ' make bootstrap'
echo ' make release'
exit 1
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@c0fc915677567258ee3c194d03ffe7ae3dc8d741 # v4.31.9
with:
category: "/language:${{matrix.language}}"
================================================
FILE: .github/workflows/dependency-review-action.yml
================================================
name: 'Dependency Review'
on: [pull_request]
permissions: {}
jobs:
dependency-review:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: 'Checkout Repository'
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
- name: 'Dependency Review'
uses: actions/dependency-review-action@05fe4576374b728f0c523d6a13d64c25081e0803 #v4.8.3
with:
# https://github.com/actions/dependency-review-action/issues/944
allow-dependencies-licenses: 'pkg:pypi/uv@0.8.10'
deny-licenses: |
AGPL-1.0,AGPL-1.0-only,AGPL-1.0-or-later,AGPL-3.0,AGPL-3.0-only,AGPL-3.0-or-later,
AML,
CDLA-Sharing-1.0,
CPAL-1.0,
MIT-enna,
EUPL-1.1,EUPL-1.2,
LGPL-3.0+,LGPL-3.0,LGPL-3.0-only,LGPL-3.0-or-later,
GPL-3.0-only,GPL-3.0-or-later,GPL-3.0,GPL-3.0+,GPL-3.0-with-autoconf-exception,GPL-3.0-with-GCC-exception,
NASA-1.3,
ODbL-1.0,
OSL-3.0,
Parity-7.0.0,
RPSL-1.0,
SSPL-1.0
## Honest Public License (HPL) 1.0
================================================
FILE: .github/workflows/detect-secrets-requirements.txt
================================================
#
# This file is autogenerated by pip-compile with Python 3.12
# by the following command:
#
# pip-compile --generate-hashes --output-file=.github/workflows/detect-secrets-requirements.txt --strip-extras .github/workflows/detect-secrets-requirements.in
#
certifi==2025.6.15 \
--hash=sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057 \
--hash=sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b
# via requests
charset-normalizer==3.4.2 \
--hash=sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4 \
--hash=sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45 \
--hash=sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7 \
--hash=sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0 \
--hash=sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7 \
--hash=sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d \
--hash=sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d \
--hash=sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0 \
--hash=sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184 \
--hash=sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db \
--hash=sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b \
--hash=sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64 \
--hash=sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b \
--hash=sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8 \
--hash=sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff \
--hash=sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344 \
--hash=sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58 \
--hash=sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e \
--hash=sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471 \
--hash=sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148 \
--hash=sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a \
--hash=sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836 \
--hash=sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e \
--hash=sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63 \
--hash=sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c \
--hash=sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1 \
--hash=sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01 \
--hash=sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366 \
--hash=sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58 \
--hash=sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5 \
--hash=sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c \
--hash=sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2 \
--hash=sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a \
--hash=sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597 \
--hash=sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b \
--hash=sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5 \
--hash=sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb \
--hash=sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f \
--hash=sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0 \
--hash=sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941 \
--hash=sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0 \
--hash=sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86 \
--hash=sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7 \
--hash=sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7 \
--hash=sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455 \
--hash=sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6 \
--hash=sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4 \
--hash=sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0 \
--hash=sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3 \
--hash=sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1 \
--hash=sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6 \
--hash=sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981 \
--hash=sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c \
--hash=sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980 \
--hash=sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645 \
--hash=sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7 \
--hash=sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12 \
--hash=sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa \
--hash=sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd \
--hash=sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef \
--hash=sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f \
--hash=sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2 \
--hash=sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d \
--hash=sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5 \
--hash=sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02 \
--hash=sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3 \
--hash=sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd \
--hash=sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e \
--hash=sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214 \
--hash=sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd \
--hash=sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a \
--hash=sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c \
--hash=sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681 \
--hash=sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba \
--hash=sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f \
--hash=sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a \
--hash=sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28 \
--hash=sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691 \
--hash=sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82 \
--hash=sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a \
--hash=sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027 \
--hash=sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7 \
--hash=sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518 \
--hash=sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf \
--hash=sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b \
--hash=sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9 \
--hash=sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544 \
--hash=sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da \
--hash=sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509 \
--hash=sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f \
--hash=sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a \
--hash=sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f
# via requests
detect-secrets==1.5.0 \
--hash=sha256:6bb46dcc553c10df51475641bb30fd69d25645cc12339e46c824c1e0c388898a \
--hash=sha256:e24e7b9b5a35048c313e983f76c4bd09dad89f045ff059e354f9943bf45aa060
# via -r .github/workflows/detect-secrets-requirements.in (`echo "detect-secrets" > .github/workflows/detect-secrets-requirements.in`)
idna==3.10 \
--hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \
--hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3
# via requests
pyyaml==6.0.2 \
--hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \
--hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \
--hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \
--hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \
--hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \
--hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \
--hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \
--hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \
--hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \
--hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \
--hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \
--hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \
--hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \
--hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \
--hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \
--hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \
--hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \
--hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \
--hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \
--hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \
--hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \
--hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \
--hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \
--hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \
--hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \
--hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \
--hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \
--hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \
--hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \
--hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \
--hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \
--hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \
--hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \
--hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \
--hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \
--hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \
--hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \
--hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \
--hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \
--hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \
--hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \
--hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \
--hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \
--hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \
--hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \
--hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \
--hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \
--hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \
--hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \
--hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \
--hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \
--hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \
--hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4
# via detect-secrets
requests==2.32.4 \
--hash=sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c \
--hash=sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422
# via detect-secrets
urllib3==2.6.3 \
--hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
--hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
# via requests
================================================
FILE: .github/workflows/gh-pages.yml
================================================
name: Deploy to GitHub Pages
permissions: {}
on:
push:
branches:
- main
# Review gh actions docs if you want to further define triggers, paths, etc
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on
# Review gh actions docs if you want to further define triggers, paths, etc
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on
jobs:
build:
name: Build Docusaurus
permissions:
contents: read # to download the repository
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: 22
cache: npm
cache-dependency-path: 'docusaurus/package-lock.json'
- name: Install dependencies
run: cd docusaurus && npm ci
- name: Build website
run: cd docusaurus && npm run build
- name: Upload Build Artifact
uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0
with:
path: docusaurus/build
deploy:
name: Deploy to GitHub Pages
needs: build
# Grant GITHUB_TOKEN the permissions required to make a Pages deployment
permissions:
pages: write # to deploy to Pages
id-token: write # to verify the deployment originates from an appropriate source
# Deploy to the github-pages environment
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5
================================================
FILE: .github/workflows/merge-prevention.yml
================================================
---
# This workflow is to prevent unintentional merges that cannot be accomplished by rulesets or other settings.
name: Merge Prevention
on:
pull_request:
types:
- opened
- reopened
- synchronize
- edited
- labeled
- unlabeled
merge_group:
types:
- checks_requested
permissions:
actions: none
attestations: none
checks: none
contents: none
deployments: none
discussions: none
id-token: none
issues: none
models: none
packages: none
pages: none
pull-requests: none
repository-projects: none
security-events: none
statuses: none
env:
DO_NOT_MERGE_LABEL: ${{ vars.DO_NOT_MERGE_LABEL || 'do-not-merge' }}
HALT_MERGES: ${{ vars.HALT_MERGES || '0' }}
jobs:
get-pr-info:
permissions:
contents: read
pull-requests: read
# id-token: write
runs-on: ubuntu-latest
outputs:
pr_number: ${{ steps.get-pr.outputs.pr-number }}
pr_labels: ${{ steps.get-pr.outputs.pr-labels }}
env:
GH_TOKEN: ${{ github.token }}
PR_LABELS_JSON: ${{ toJson(github.event.pull_request.labels.*.name) }}
steps:
- name: Get PR info
id: get-pr
run: |
if [ "${{ github.event_name }}" == "merge_group" ]; then
PR_NUMBER=$(echo "${{ github.ref }}" | grep -oP '(?<=/pr-)\d+' || echo "")
PR_LABELS=$(gh api repos/${{ github.repository }}/pulls/$PR_NUMBER | jq -c '[.labels[].name] // []')
echo "::group::Getting Information"
gh api repos/${{ github.repository }}/pulls/$PR_NUMBER
echo $PR_LABELS
echo "::endgroup::"
elif [ "${{ github.event_name }}" == "pull_request" ]; then
PR_NUMBER="${{ github.event.pull_request.number }}"
PR_LABELS=$(echo "$PR_LABELS_JSON" | jq -c '.')
fi
echo "::group::Debug Output Values"
echo "PR_NUMBER: $PR_NUMBER"
echo "PR_LABELS: $PR_LABELS"
echo "::endgroup::"
echo "pr-number=$PR_NUMBER" >> $GITHUB_OUTPUT
echo "pr-labels=$PR_LABELS" >> $GITHUB_OUTPUT
check-merge-status:
runs-on: ubuntu-latest
needs: get-pr-info
if: always()
steps:
- run: |
PR_NUMBER="${{ needs.get-pr-info.outputs.pr_number }}"
# Default to 0 (allow all) if not set
if [ -z "$HALT_MERGES" ]; then
HALT_MERGES=0
fi
echo "::debug::HALT_MERGES value: $HALT_MERGES"
echo "::debug::This PR number: $PR_NUMBER"
if [ "$HALT_MERGES" = "0" ]; then
echo "::notice::✅ All merges are allowed (HALT_MERGES=0)"
exit 0
elif [ "$HALT_MERGES" = "$PR_NUMBER" ]; then
echo "::notice::✅ This PR #$PR_NUMBER is explicitly allowed"
exit 0
else
echo "::debug::🛑 Merges are blocked. HALT_MERGES is set to $HALT_MERGES"
if [ "$HALT_MERGES" -lt 0 ]; then
echo "::error::All merges are blocked"
else
echo "::warning::Only PR #$HALT_MERGES is allowed to merge"
fi
exit 1
fi
fail-by-label:
runs-on: ubuntu-latest
needs: get-pr-info
if: always()
steps:
- run: |
echo "::group::Debug Output Values"
echo "PR_LABELS: ${{ needs.get-pr-info.outputs.pr_labels }}"
echo "::endgroup::"
- name: When PR has the "${{ env.DO_NOT_MERGE_LABEL }}" label
id: pr-has-label
if: contains(needs.get-pr-info.outputs.pr_labels, env.DO_NOT_MERGE_LABEL)
run: |
echo "::error::❌ The label \"${{ env.DO_NOT_MERGE_LABEL }}\" is used to prevent merging."
exit 1
- name: When PR does not have the "${{ env.DO_NOT_MERGE_LABEL }}" label
id: pr-missing-label
if: ! contains(needs.get-pr-info.outputs.pr_labels, env.DO_NOT_MERGE_LABEL)
run: |
echo "::notice::✅ The label \"${{ env.DO_NOT_MERGE_LABEL }}\" is absent"
exit 0
================================================
FILE: .github/workflows/powershell.yml
================================================
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
#
# https://github.com/microsoft/action-psscriptanalyzer
# For more information on PSScriptAnalyzer in general, see
# https://github.com/PowerShell/PSScriptAnalyzer
name: PSScriptAnalyzer
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
schedule:
- cron: '20 18 * * 6'
permissions: {}
jobs:
build:
permissions:
contents: read
security-events: write
name: PSScriptAnalyzer
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
- name: Run PSScriptAnalyzer
uses: microsoft/psscriptanalyzer-action@6b2948b1944407914a58661c49941824d149734f
with:
path: .\
recurse: true
output: results.sarif
- name: Upload SARIF results file
uses: github/codeql-action/upload-sarif@c0fc915677567258ee3c194d03ffe7ae3dc8d741 # v4.31.9
with:
sarif_file: results.sarif
================================================
FILE: .github/workflows/pre-commit-requirements.txt
================================================
#
# This file is autogenerated by pip-compile with Python 3.10
# by the following command:
#
# pip-compile --generate-hashes --output-file=.github/workflows/pre-commit-requirements.txt --strip-extras .github/workflows/pre-commit-requirements.in
#
cfgv==3.4.0 \
--hash=sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9 \
--hash=sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560
# via pre-commit
distlib==0.3.9 \
--hash=sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87 \
--hash=sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403
# via virtualenv
filelock==3.20.3 \
--hash=sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1 \
--hash=sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1
# via virtualenv
identify==2.6.12 \
--hash=sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2 \
--hash=sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6
# via pre-commit
nodeenv==1.9.1 \
--hash=sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f \
--hash=sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9
# via pre-commit
platformdirs==4.3.8 \
--hash=sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc \
--hash=sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4
# via virtualenv
pre-commit==4.2.0 \
--hash=sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146 \
--hash=sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd
# via -r .github/workflows/pre-commit-requirements.in
pyyaml==6.0.2 \
--hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \
--hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \
--hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \
--hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \
--hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \
--hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \
--hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \
--hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \
--hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \
--hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \
--hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \
--hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \
--hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \
--hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \
--hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \
--hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \
--hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \
--hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \
--hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \
--hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \
--hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \
--hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \
--hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \
--hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \
--hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \
--hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \
--hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \
--hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \
--hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \
--hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \
--hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \
--hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \
--hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \
--hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \
--hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \
--hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \
--hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \
--hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \
--hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \
--hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \
--hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \
--hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \
--hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \
--hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \
--hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \
--hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \
--hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \
--hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \
--hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \
--hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \
--hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \
--hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \
--hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4
# via pre-commit
typing-extensions==4.15.0 \
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
--hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548
# via virtualenv
virtualenv==20.36.1 \
--hash=sha256:575a8d6b124ef88f6f51d56d656132389f961062a9177016a50e4f507bbcc19f \
--hash=sha256:8befb5c81842c641f8ee658481e42641c68b5eab3521d8e092d18320902466ba
# via pre-commit
================================================
FILE: .github/workflows/pre-commit.yml
================================================
name: pre-commit
on:
pull_request:
push:
permissions: {}
jobs:
detect-precommit:
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
precommits: ${{ steps.find-precommit.outputs.precommits }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Find precommit configurations
id: find-precommit
working-directory: .
run: |
PRECOMMITS=$(find . -name ".pre-commit-config.yaml" -exec dirname {} \; | sed 's/^\.\///' | jq -R -s -c 'split("\n")[:-1]')
echo "precommits=$PRECOMMITS" >> $GITHUB_OUTPUT
pre-commit:
needs: [detect-precommit]
if: ${{ needs.detect-precommit.outputs.precommits != '[]' && needs.detect-precommit.outputs.precommits != '' }}
strategy:
fail-fast: false
matrix:
precommit: ${{ fromJson(needs.detect-precommit.outputs.precommits) }}
name: Precommit ${{ matrix.precommit }}
defaults:
run:
shell: bash
working-directory: ${{ matrix.precommit }}
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 #v6.2.0
with:
python-version-file: ${{ matrix.precommit }}/.python-version
- run: |
echo "github.workspace=${{ github.workspace }}"
echo "env.GITHUB_WORKSPACE=${{ env.GITHUB_WORKSPACE }}"
echo "vars.GITHUB_WORKSPACE=${{ vars.GITHUB_WORKSPACE }}"
python -m pip install --require-hashes --requirement ${{ github.workspace }}/.github/workflows/pre-commit-requirements.txt
python -m pip freeze --local
- uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 #v5.0.3
with:
path: ~/.cache/pre-commit
key: pre-commit-3|${{ runner.os }}|${{ hashFiles(matrix.precommit) }}
- name: Set SKIP variable for main branch
if: github.ref == 'refs/heads/main'
run: echo "SKIP=no-commit-to-branch" >> $GITHUB_ENV
- run: SKIP="$SKIP" pre-commit run --show-diff-on-failure --color=always --all-files
working-directory: ${{ matrix.precommit }}
================================================
FILE: .github/workflows/pull-request-lint.yml
================================================
name: pull-request-lint
on:
pull_request_target:
branches: [ "main" ]
types:
- labeled
- opened
- synchronize
- reopened
- ready_for_review
- edited
merge_group: {}
permissions: {}
jobs:
validate:
name: Validate PR title
runs-on: ubuntu-latest
permissions:
pull-requests: read
if: (github.event_name == 'pull_request' || github.event_name == 'pull_request_target')
steps:
- uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 #v6.1.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
types: |-
build
chore
ci
docs
feat
fix
perf
refactor
test
requireScope: false
contributorStatement:
name: Require Contributor Statement
runs-on: ubuntu-latest
permissions:
pull-requests: read
env:
PR_BODY: ${{ github.event.pull_request.body }}
EXPECTED: By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of the [project license](https://github.com/awslabs/mcp/blob/main/LICENSE).
HELP: Contributor statement missing from PR description. Please include the following text in the PR description
if: (github.event_name == 'pull_request' || github.event_name == 'pull_request_target') && !(github.event.pull_request.user.login == 'cdklabs-automation' || github.event.pull_request.user.login == 'dependabot[bot]')
steps:
- uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd #v8.0.0
with:
script: |-
const actual = process.env.PR_BODY.replace(/\r?\n/g, "\n");
const expected = process.env.EXPECTED.replace(/\r?\n/g, "\n");
if (!actual.includes(expected)) {
console.log("%j", actual);
console.log("%j", expected);
core.setFailed(`${process.env.HELP}: ${expected}`);
}
================================================
FILE: .github/workflows/python.yml
================================================
name: Python
on:
push:
pull_request:
workflow_dispatch:
permissions: {}
jobs:
detect-packages:
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
packages: ${{ steps.find-packages.outputs.packages }}
changed-directories: ${{ steps.find-changed-directories.outputs.changed-directories }}
changed-files: ${{ steps.find-changed-directories.outputs.changed-files }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- name: Fetch base branch
run: git fetch origin ${{ github.base_ref }}:${{ github.base_ref }}
- name: find changed directories
id: find-changed-directories
env:
EVENT_NAME: ${{ github.event_name }}
EVENT_BEFORE: ${{ github.event.before }}
BASE_REF: ${{ github.base_ref }}
run: |
# Push against last commit
# Pull Request against target branch sha
# Otherwise against latest release
if [ "$EVENT_NAME" == "push" ]; then
# Handle null SHA case for new branches
if [ "$EVENT_BEFORE" == "0000000000000000000000000000000000000000" ]; then
SINCE="$(git merge-base HEAD origin/main)"
else
SINCE="$EVENT_BEFORE"
fi
elif [ "$EVENT_NAME" == "pull_request" ]; then
SINCE="$BASE_REF"
else
SINCE="$(gh release list --exclude-drafts --exclude-pre-releases --limit 1 --json tagName | jq -r '.[].tagName')"
fi;
if [ -z "$SINCE" ]; then SINCE="$(git rev-list --max-parents=0 HEAD)"; fi;
echo "$SINCE"
CHANGEDFILES="$(git diff --name-only "$SINCE" HEAD | sed 's/^\.\///' | jq -R -s -c 'split("\n")[:-1]')"
CHANGEDDIRECTORIES="$(echo $CHANGEDFILES | jq -r '.[] | select(. | startswith("src\/"))' | cut -d'/' -f2 | sort -u | sed 's/^\.\///' | jq -R -s -c 'split("\n")[:-1]')"
echo "$CHANGEDDIRECTORIES"
echo "$CHANGEDFILES"
echo "changed-files=$CHANGEDFILES" >> $GITHUB_OUTPUT
echo "changed-directories=$CHANGEDDIRECTORIES" >> $GITHUB_OUTPUT
- name: Find Python packages
id: find-packages
working-directory: src
run: |
PACKAGES=$(find . -name pyproject.toml -exec dirname {} \; | sed 's/^\.\///' | jq -R -s -c 'split("\n")[:-1]')
echo "packages=$PACKAGES" >> $GITHUB_OUTPUT
build:
needs: [detect-packages]
if: ${{ needs.detect-packages.outputs.packages != '[]' && needs.detect-packages.outputs.packages != '' }}
strategy:
fail-fast: false
matrix:
package: ${{ fromJson(needs.detect-packages.outputs.packages) }}
name: Build ${{ matrix.package }}
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
security-events: write
actions: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install uv
uses: astral-sh/setup-uv@eac588ad8def6316056a12d4907a9d4d84ff7a3b # v7.3.0
- name: Set up Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version-file: "src/${{ matrix.package }}/.python-version"
# cache: uv (not supported)
- name: Cache GraphViz
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 #v5.0.3
id: cache-graphviz
with:
path: "~/graphviz"
key: graphviz
- name: Install Graphviz
env:
CACHE_HIT: ${{steps.cache-graphviz.outputs.cache-hit}}
run: |
if [[ "$CACHE_HIT" == 'true' ]]; then
sudo cp --verbose --force --recursive ~/graphviz/* /
else
sudo apt-get update && sudo apt-get install -y graphviz
mkdir -p ~/graphviz
sudo dpkg -L graphviz | while IFS= read -r f; do if test -f $f; then echo $f; fi; done | xargs cp --parents --target-directory ~/graphviz/
fi
- name: Install Bandit
run: |
pip install --require-hashes --requirement .github/workflows/bandit-requirements.txt
- name: Security check - Bandit
id: bandit-check
working-directory: src/${{ matrix.package }}
run: bandit -r --severity-level medium --confidence-level medium -f html -o bandit-report-${{ matrix.package }}.html -c "pyproject.toml" . || echo "status=failure" >> $GITHUB_OUTPUT
- name: Store Bandit as Artifact
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: bandit-report-${{ matrix.package }}.html
path: src/${{ matrix.package }}/bandit-report-${{ matrix.package }}.html
- name: Stop on Bandit failure
if: steps.bandit-check.outputs.status == 'failure'
run: exit 1
- name: Install dependencies
working-directory: src/${{ matrix.package }}
run: uv sync --frozen --all-extras --dev
- name: Verify package name consistency
run: |
python3 scripts/verify_package_name.py src/${{ matrix.package }}
uv run --script scripts/verify_awslabs_init.py src/${{ matrix.package }}
python3 scripts/verify_tool_names.py src/${{ matrix.package }} || true
- name: Run tests
working-directory: src/${{ matrix.package }}
run: |
if [ -d "tests" ]; then
uv run --frozen pytest --cov --cov-branch --cov-report=term-missing --cov-report=xml:${{ matrix.package }}-coverage.xml --junitxml=${{ matrix.package}}-junit.xml -o junit-family=legacy
else
echo "No tests directory found, skipping tests"
fi
- name: Upload coverage reports to Codecov
if: ${{ !cancelled() }}
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de #v5.5.2
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ${{ matrix.package }}-coverage.xml
report_type: "coverage"
handle_no_reports_found: true
- name: Upload test reports to Codecov
if: ${{ !cancelled() }}
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de #v5.5.2
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ${{ matrix.package }}-junit.xml
report_type: "test_results"
handle_no_reports_found: true
- name: Run pyright
working-directory: src/${{ matrix.package }}
run: uv run --frozen pyright
- name: Run ruff format
working-directory: src/${{ matrix.package }}
run: uv run --frozen ruff format .
- name: Run ruff check
working-directory: src/${{ matrix.package }}
run: uv run --frozen ruff check .
- name: Build package
working-directory: src/${{ matrix.package }}
run: uv build
- name: Upload distribution
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: dist-${{ matrix.package }}
path: src/${{ matrix.package }}/dist/
- name: Generate Software Bill of Materials (SBOM)
working-directory: src/${{ matrix.package }}
run: |
source .venv/bin/activate
echo "Attempt to convert to proper UTF-8 files https://github.com/CycloneDX/cyclonedx-python/issues/868"
find .venv -type f -path '*/*.dist-info/*' > .venv/FILES
# because grep with xargs returns 123 have to do this the long and hard way...
while IFS= read -r line; do
(grep -s -q -axv '.*' $line &&
if [[ "$(file -b --mime-encoding $line)" != "binary" ]]; then
echo "illegal utf-8 characters in $line...converting...";
iconv -f $(file -b --mime-encoding $line) -t utf-8 $line > $line.utf8;
mv $line.utf8 $line;
fi;
) || echo "good $line"
done < .venv/FILES;
uv tool run --from cyclonedx-bom==6.1.3 cyclonedx-py environment $VIRTUAL_ENV --PEP-639 --gather-license-texts --pyproject pyproject.toml --mc-type library --output-format JSON > sbom.json
- name: Display SBOM
working-directory: src/${{ matrix.package }}
run: |
cat <<EOT |
import re
import json
import importlib.metadata as metadata
def parse_bom(json_file):
# Parse the JSON file
with open(json_file, 'r') as file:
data = json.load(file)
# Extract components
components = []
for component in data['components']:
comp_info = {}
# Get name, version, description, and purl
comp_info['name'] = component.get('name', 'Unknown')
comp_info['version'] = component.get('version', 'Unknown')
comp_info['description'] = component.get('description', 'Unknown')
comp_info['purl'] = component.get('purl', 'Unknown')
# Get licenses
comp_info['licenses'] = []
licenses = component.get('licenses', [])
for license in licenses:
if license.get('license', {}).get('id'):
comp_info['licenses'].append(license.get('license').get('id'))
if len(comp_info['licenses']) == 0:
comp_info['licenses'].append("No licenses")
# Extract additional information (copyright, etc.)
copyright_info = extract_copyright_from_metadata(comp_info['name'])
comp_info['copyright'] = copyright_info if copyright_info else "No copyright information"
components.append(comp_info)
return components
def extract_copyright_from_metadata(package_name):
try:
# Use importlib.metadata to retrieve metadata from the installed package
dist = metadata.distribution(package_name)
metadata_info = dist.metadata
# Extract relevant metadata
copyright_info = []
author = metadata_info.get('Author')
author_email = metadata_info.get('Author-email')
license_info = metadata_info.get('License')
if author:
copyright_info.append(f"Author: {author}")
if author_email:
copyright_info.append(f"Author Email: {author_email}")
if license_info:
copyright_info.append(f"License: {license_info}")
# Check for classifiers or any extra metadata fields
if 'Classifier' in metadata_info:
for classifier in metadata_info.get_all('Classifier'):
if 'copyright' in classifier.lower():
copyright_info.append(classifier)
return ', '.join(copyright_info) if copyright_info else None
except metadata.PackageNotFoundError:
return None
def main():
bom_file = 'sbom.json' # Replace with your BOM file path
components = parse_bom(bom_file)
for component in components:
print(f"Name: {component['name']}")
print(f"Version: {component['version']}")
print(f"Description: {component['description']}")
print(f"PURL: {component['purl']}")
print(f"Licenses: {', '.join(component['licenses'])}")
print(f"Copyright: {component['copyright']}")
print("-" * 40)
if __name__ == "__main__":
main()
EOT
python -
- name: Upload Software Bill of Materials
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: sbom-${{ matrix.package }}
path: src/${{ matrix.package }}/sbom.json
================================================
FILE: .github/workflows/release-initiate-branch.yml
================================================
---
name: Release Branch (initiated)
description: |
This workflow initiates a release branch when changes are detected in the source directory.
It finds changed directories since the last published release, creates a new branch,
bumps versions in changed directories, and creates a pull request for the changes.
on:
workflow_dispatch:
env:
BOT_USER_EMAIL: ${{ vars.BOT_USER_EMAIL || '203918161+awslabs-mcp@users.noreply.github.com' }}
BOT_USER_NAME: ${{ vars.BOT_USER_NAME || 'awslabs-mcp' }}
permissions:
actions: none
attestations: none
checks: none
contents: none
deployments: none
discussions: none
id-token: none
issues: none
models: none
packages: none
pages: none
pull-requests: none
repository-projects: none
security-events: none
statuses: none
jobs:
look-for-changes:
name: Changes Since Last Release
env:
SRC_DIRECTORY: ${{ vars.SRC_DIRECTORY || 'src' }}
outputs:
changed-directories: ${{ steps.find-changed-directories.outputs.changed-directories }}
permissions:
contents: read
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
token: ${{ secrets.BOT_GITHUB_TOKEN }}
fetch-depth: 0
- name: Validate source directory
run: |
set -euo pipefail
SRC_DIR="${{ env.SRC_DIRECTORY }}"
echo "::debug::Validating source directory: $SRC_DIR"
# Validate directory name format
if [[ ! "$SRC_DIR" =~ ^[a-zA-Z0-9_-]+$ ]]; then
echo "::error::Invalid source directory format: $SRC_DIR" >&2
exit 1
fi
# Check if directory exists
if [[ ! -d "$SRC_DIR" ]]; then
echo "::error::Source directory does not exist: $SRC_DIR" >&2
exit 1
fi
echo "::debug::Source directory validated: $SRC_DIR"
- name: Find Changed Directories Since Last Release
id: find-changed-directories
env:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
run: |
set -euo pipefail
echo "::debug::Finding changed directories since last release"
# Get last release with validation
SINCE="$(gh release list --exclude-drafts --exclude-pre-releases --limit 1 --json tagName | jq -r '.[].tagName // empty')"
if [[ -z "$SINCE" ]]; then
echo "::warning::No previous release found, using initial commit"
SINCE="$(git rev-list --max-parents=0 HEAD)"
else
echo "::debug::Comparing against release: $SINCE"
# Validate tag exists
if ! git rev-parse "$SINCE" >/dev/null 2>&1; then
echo "::error::Release tag does not exist in repository: $SINCE" >&2
exit 1
fi
fi
# Get changed files
CHANGED_FILES="$(git diff --name-only "$SINCE" HEAD | sed 's/^\.\///' | jq -R -s -c 'split("\n")[:-1]')"
# Filter and validate source directories
SRC_DIRECTORIES="$(echo "$CHANGED_FILES" | jq -r --arg src "${{ env.SRC_DIRECTORY }}" \
'.[] | select(. | startswith($src + "/"))' | \
cut -d'/' -f2 | \
sort -u | \
while IFS= read -r dir; do
# Validate directory name format
if [[ "$dir" =~ ^[a-zA-Z0-9_-]+$ ]] && [[ -n "$dir" ]]; then
echo "$dir"
else
echo "::warning::Skipping invalid directory name: $dir" >&2
fi
done | \
jq -R -s -c 'split("\n")[:-1] | map(select(length > 0))')"
echo "changed-directories=$SRC_DIRECTORIES" >> $GITHUB_OUTPUT
echo "::debug::Found changed directories: $SRC_DIRECTORIES"
create-branch:
name: Create Release Branch
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: write # SECURITY: Only for branch creation
outputs:
release-branch: ${{ steps.make-a-branch.outputs.release-branch }}
needs: [look-for-changes]
if: ${{ needs.look-for-changes.outputs.changed-directories != '[]' && needs.look-for-changes.outputs.changed-directories != '' }}
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
token: ${{ secrets.BOT_GITHUB_TOKEN }}
- name: Create release branch
id: make-a-branch
run: |
set -euo pipefail
# Generate release identifier with validation
RELEASE="$(date +'%Y.%m.%Y%m%d%H%M%S')"
RELEASE_BRANCH="release/$RELEASE"
echo "::debug::Creating release branch: $RELEASE_BRANCH"
# Validate release format
if [[ ! "$RELEASE" =~ ^[0-9]{4}\.[0-9]+\.[0-9]{14}$ ]]; then
echo "::error::Invalid release format generated: $RELEASE" >&2
exit 1
fi
# Check if branch already exists
if git ls-remote --heads origin "$RELEASE_BRANCH" | grep -q "$RELEASE_BRANCH"; then
echo "::error::Release branch already exists: $RELEASE_BRANCH" >&2
exit 1
fi
# Configure git user
git config --local user.email "${{ env.BOT_USER_EMAIL }}"
git config --local user.name "${{ env.BOT_USER_NAME }}"
# Create and push branch
git checkout -b "$RELEASE_BRANCH"
git push --set-upstream origin "$RELEASE_BRANCH"
# Verify branch was created
if ! git ls-remote --heads origin "$RELEASE_BRANCH" | grep -q "$RELEASE_BRANCH"; then
echo "::error::Failed to verify branch creation: $RELEASE_BRANCH" >&2
exit 1
fi
echo "release-branch=$RELEASE_BRANCH" >> $GITHUB_OUTPUT
echo "::debug::Successfully created release branch: $RELEASE_BRANCH"
bump-changed-directories:
name: Bump Versions
env:
SRC_DIRECTORY: ${{ vars.SRC_DIRECTORY || secrets.SRC_DIRECTORY || 'src' }}
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: write
needs: [look-for-changes, create-branch]
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
token: ${{ secrets.BOT_GITHUB_TOKEN }}
ref: ${{ needs.create-branch.outputs.release-branch }}
- name: Install uv
uses: astral-sh/setup-uv@eac588ad8def6316056a12d4907a9d4d84ff7a3b # v7.3.0
- name: Bump package version
run: |
set -euo pipefail
echo "${{ toJson(needs.look-for-changes.outputs.changed-directories) }}" | \
jq -r '.[]' | \
xargs -I{} -s 1024 \
bash -c '(uv run --script .github/workflows/release.py bump-package --directory="$SRC_DIRECTORY/{}" && if [ -f "$SRC_DIRECTORY/{}/pyproject.toml" ]; then uv sync --directory="$SRC_DIRECTORY/{}";fi;) || echo "
NOTE: skipped $SRC_DIRECTORY/{}; either deleted or not a Python project...
"' bash
echo "::debug::Version bumps completed"
- name: Configure Git and GPG securely
env:
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
GPG_KEY_ID: ${{ secrets.GPG_KEY_ID }}
run: |
set -euo pipefail # SECURITY: Strict error handling
# Create secure temporary directory for GPG
export GNUPGHOME=$(mktemp -d)
chmod 700 "$GNUPGHOME"
echo "GNUPGHOME=$GNUPGHOME" >> $GITHUB_ENV
echo "::debug::Setting up secure GPG environment"
# Configure git user
git config --local user.email "${{ env.BOT_USER_EMAIL }}"
git config --local user.name "${{ env.BOT_USER_NAME }}"
# Import GPG key without exposing secrets in command line
echo "$GPG_PRIVATE_KEY" | gpg --batch --import --quiet
echo "$GPG_KEY_ID:6:" | gpg --import-ownertrust --quiet
# Configure git GPG settings
git config --global user.signingkey "$GPG_KEY_ID"
git config --global commit.gpgsign true
git config --global tag.gpgsign true
# Test GPG functionality
echo "test" | gpg --batch --yes --passphrase-fd 0 --pinentry-mode loopback \
--sign --armor --local-user "$GPG_KEY_ID" <<< "$GPG_PASSPHRASE" > /dev/null
echo "::debug::GPG configuration completed successfully"
- name: Commit and push changes
env:
GPG_KEY_ID: ${{ secrets.GPG_KEY_ID }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
run: |
set -euo pipefail
echo "::debug::Committing changes"
# Add only the source directory
git add "$SRC_DIRECTORY"
# Check if there are changes to commit
if git diff --cached --quiet; then
echo "::warning::No changes to commit for: $SRC_DIRECTORY"
else
# Cache GPG signature
echo "commit" | gpg --batch --yes --passphrase-fd 0 --pinentry-mode loopback \
--sign --armor --local-user "$GPG_KEY_ID" <<< "$GPG_PASSPHRASE" > /dev/null
# Create signed commit
git commit -m "chore: bump packages for ${{ needs.create-branch.outputs.release-branch }}" --sign
# Pull with rebase to maintain linear history
git pull --rebase origin "${{ needs.create-branch.outputs.release-branch }}"
# Push changes
git push origin "${{ needs.create-branch.outputs.release-branch }}"
echo "::debug::Successfully committed and pushed changes for: $SRC_DIRECTORY"
fi
- name: Secure GPG cleanup
if: always()
run: |
set +e # Don't fail on cleanup errors
echo "::debug::Performing secure cleanup"
if [[ -n "${GNUPGHOME:-}" && -d "$GNUPGHOME" ]]; then
rm -rf "$GNUPGHOME"
echo "::debug::Cleaned up GPG directory"
fi
gpgconf --kill gpg-agent 2>/dev/null || true
unset GPG_PRIVATE_KEY GPG_PASSPHRASE GPG_KEY_ID GNUPGHOME 2>/dev/null || true
echo "::debug::Secure cleanup completed"
create_pr:
name: Create Pull Request
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
pull-requests: write
contents: read
needs: [look-for-changes, create-branch, bump-changed-directories]
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
token: ${{ secrets.BOT_GITHUB_TOKEN }}
ref: ${{ needs.create-branch.outputs.release-branch }}
- name: Create pull request
env:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
run: |
set -euo pipefail
RELEASE_BRANCH="${{ needs.create-branch.outputs.release-branch }}"
BASE_BRANCH="${{ github.ref_name }}"
echo "::debug::Creating PR from $RELEASE_BRANCH to $BASE_BRANCH"
# Validate branch names
if [[ ! "$RELEASE_BRANCH" =~ ^release/[0-9]{4}\.[0-9]+\.[0-9]{14}$ ]]; then
echo "::error::Invalid release branch format: $RELEASE_BRANCH" >&2
exit 1
fi
CHANGED_ITEMS="$(echo '${{ needs.look-for-changes.outputs.changed-directories }}' | jq -r '"* " + .[]')"
# Create PR with validated content
PR_URL="$(gh pr create \
--base "$BASE_BRANCH" \
--head "$RELEASE_BRANCH" \
--title "chore: $RELEASE_BRANCH" \
--body "# $RELEASE_BRANCH
Triggered ${{ github.workflow }} by @${{ github.triggering_actor }} for @${{ github.actor }}
## Changes
$CHANGED_ITEMS
## Checklist
- [ ] Code changes have been reviewed
- [ ] Distribution packages have been built and tested
- [ ] Documentation has been updated if applicable
## Acknowledgment
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of the [project license](https://github.com/awslabs/mcp/blob/main/LICENSE).")"
echo "::debug::Successfully created pull request $PR_URL"
echo "### :ship: Ready for Review" >> $GITHUB_STEP_SUMMARY
echo "Pull request $PR_URL created for [$RELEASE_BRANCH](https://github.com/${{ github.repository }}/tree/$RELEASE_BRANCH) branch" >> $GITHUB_STEP_SUMMARY
================================================
FILE: .github/workflows/release-merge-tag.yml
================================================
---
name: Release Merged (automatic)
description: |
This workflow creates a tag on the `main` branch when a pull request is merged from a `release/**` branch.
It is triggered by the `pull_request` event with the `closed` type, specifically when the PR is merged.
The tag will be signed using GPG and pushed to the repository.
on:
pull_request:
types:
- closed
branches:
- main
env:
BOT_USER_EMAIL: ${{ vars.BOT_USER_EMAIL || '203918161+awslabs-mcp@users.noreply.github.com' }}
BOT_USER_NAME: ${{ vars.BOT_USER_NAME || 'awslabs-mcp' }}
permissions:
actions: none
attestations: none
checks: none
contents: none
deployments: none
discussions: none
id-token: none
issues: none
models: none
packages: none
pages: none
pull-requests: none
repository-projects: none
security-events: none
statuses: none
jobs:
close_release_branches_if_open:
name: Close Open Pending Releases
if: ${{ github.event.pull_request.merged == true && ! startsWith(github.event.pull_request.head.ref, 'release/') }}
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Close the Open Release Pull Requests
env:
GH_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
REF_HEAD: ${{ github.event.pull_request.head.ref }}
run: |
set -euo pipefail
gh pr list --state "open" --author "awslabs-mcp" --json "number,headRefName" | \
jq '.[] | select(.headRefName | startswith("release/")) | .number' | \
xargs -I {} \
gh pr close {} --comment "Closing outdated release. Pull request #$PR_NUMBER merged from \"$REF_HEAD\""
tag_on_release_merge:
name: Tag the Merged Release
if: github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'release/')
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: write
pull-requests: read
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
token: ${{ secrets.BOT_GITHUB_TOKEN }}
fetch-depth: 0
- name: Validate release branch and extract tag
env:
BRANCH_REF: ${{ github.event.pull_request.head.ref }}
id: validate-and-extract-tag
run: |
set -euo pipefail
# Use environment variable safely
BRANCH_REF_SAFE="$BRANCH_REF"
echo "::debug::Processing release branch: $BRANCH_REF_SAFE"
# Validate branch format (YYYY.MM.YYYYMMDDHHIISS)
if [[ ! "$BRANCH_REF_SAFE" =~ ^release/[0-9]{4}\.[0-9]+\.[0-9]{14}$ ]]; then
echo "::error::Invalid release branch format: $BRANCH_REF_SAFE" >&2
echo "::error::Expected format: release/YYYY.MM.YYYYMMDDHHIISS" >&2
exit 1
fi
# Extract and validate tag
TAG=$(echo "$BRANCH_REF_SAFE" | cut -d'/' -f2)
# Additional tag format validation
if [[ -z "$TAG" ]]; then
echo "::error::Tag cannot be empty" >&2
exit 1
fi
# Check if tag already exists
if git rev-parse "$TAG" >/dev/null 2>&1; then
echo "::error::Tag $TAG already exists" >&2
exit 1
fi
# Validate tag length (prevent excessively long tags)
if [[ ${#TAG} -gt 50 ]]; then
echo "::error::Tag length exceeds maximum allowed (50 characters): $TAG" >&2
exit 1
fi
echo "tag=$TAG" >> $GITHUB_OUTPUT
echo "::debug::Validated tag: $TAG"
- name: Configure Git and GPG securely
env:
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
GPG_KEY_ID: ${{ secrets.GPG_KEY_ID }}
run: |
set -euo pipefail # SECURITY: Strict error handling
# Create secure temporary directory for GPG
export GNUPGHOME=$(mktemp -d)
chmod 700 "$GNUPGHOME"
echo "GNUPGHOME=$GNUPGHOME" >> $GITHUB_ENV
echo "::debug::Setting up secure GPG environment"
# Configure git user (non-sensitive information)
git config --local user.email "${{ env.BOT_USER_EMAIL }}"
git config --local user.name "${{ env.BOT_USER_NAME }}"
# Import GPG key without exposing secrets in command line
echo "$GPG_PRIVATE_KEY" | gpg --batch --import --quiet
echo "$GPG_KEY_ID:6:" | gpg --import-ownertrust --quiet
# Configure git GPG settings
git config --global user.signingkey "$GPG_KEY_ID"
git config --global commit.gpgsign true
git config --global tag.gpgsign true
# Test GPG functionality without exposing passphrase
echo "test" | gpg --batch --yes --passphrase-fd 0 --pinentry-mode loopback \
--sign --armor --local-user "$GPG_KEY_ID" <<< "$GPG_PASSPHRASE" > /dev/null
echo "::debug::GPG configuration completed successfully"
- name: Create and push signed tag
id: create-tag
env:
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
GPG_KEY_ID: ${{ secrets.GPG_KEY_ID }}
TAG: ${{ steps.validate-and-extract-tag.outputs.tag }}
run: |
set -euo pipefail
echo "::debug::Creating signed tag: $TAG"
# SECURITY: Validate tag variable is set
if [[ -z "$TAG" ]]; then
echo "::error::TAG variable is not set" >&2
exit 1
fi
# Create signed tag with proper message
git tag -a "$TAG" -m "Release $TAG" --sign
# Verify tag was created and is signed
if ! git tag -v "$TAG" 2>/dev/null; then
echo "::error::Failed to verify signed tag: $TAG" >&2
exit 1
fi
# Cache GPG signature
echo "commit" | gpg --batch --yes --passphrase-fd 0 --pinentry-mode loopback \
--sign --armor --local-user "$GPG_KEY_ID" <<< "$GPG_PASSPHRASE" > /dev/null
# Push tag with verification
git push origin "$TAG"
# Verify tag was pushed successfully
if [[ $(git ls-remote --tags origin "$TAG" | wc -l) -eq 0 ]]; then
echo "::error::Failed to verify tag was pushed: $TAG" >&2
exit 1
fi
echo "tag-created=true" >> $GITHUB_OUTPUT
echo "::debug::Successfully created and pushed signed tag: $TAG"
echo "### :pushpin: Merge Tagged" >> $GITHUB_STEP_SUMMARY
echo "[$TAG](https://github.com/${{ github.repository }}/releases/tag/$TAG) create so watch the [workflow](https://github.com/${{ github.repository }}/actions/workflows/release.yml)" >> $GITHUB_STEP_SUMMARY
- name: Secure cleanup
if: always()
run: |
set +e
echo "::debug::Performing secure cleanup"
# Clean up GPG directory
if [[ -n "${GNUPGHOME:-}" && -d "$GNUPGHOME" ]]; then
rm -rf "$GNUPGHOME"
echo "::debug::Cleaned up GPG directory"
fi
# Kill GPG agent
gpgconf --kill gpg-agent 2>/dev/null || true
# Clear environment variables
unset GPG_PRIVATE_KEY GPG_PASSPHRASE GPG_KEY_ID GNUPGHOME 2>/dev/null || true
echo "::debug::Secure cleanup completed"
================================================
FILE: .github/workflows/release.py
================================================
#!/usr/bin/env uv run --script
# /// script
# requires-python = ">=3.12"
# dependencies = [
# "click>=8.1.8",
# "tomlkit>=0.13.2"
# ]
# ///
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import click
import json
import logging
import re
import sys
import tomlkit
from dataclasses import dataclass
from pathlib import Path
from typing import NewType, Protocol
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(funcName)s:%(lineno)d - %(message)s',
stream=sys.stderr,
)
Version = NewType('Version', str)
SemVerRegEx = r'^(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)(?:-(?P<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$'
PACKAGE_NAME_REGEX = r'^[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9]$'
DIRECTORY_NAME_REGEX = r'^[a-zA-Z0-9_-]+$'
MAX_VERSION_COMPONENT = sys.maxsize # sys.maxsize is 9223372036854775807
MAX_PACKAGE_NAME_LENGTH = 100
MAX_PATH_DEPTH = 15
def validate_path_security(path: Path, allowed_base: Path = None) -> Path:
"""Validate path for security issues including path traversal.
Args:
path: Path to validate
allowed_base: Optional base path that the resolved path must be within
Returns:
Resolved path if valid
Raises:
ValueError: If path is invalid or contains security issues
"""
try:
resolved_path = path.resolve()
if len(resolved_path.parts) > MAX_PATH_DEPTH:
raise ValueError(f'Path depth exceeds maximum allowed ({MAX_PATH_DEPTH}): {path}')
if allowed_base:
allowed_base_resolved = allowed_base.resolve()
try:
resolved_path.relative_to(allowed_base_resolved)
except ValueError:
raise ValueError(
f'Path traversal detected: {path} is outside allowed base {allowed_base}'
)
if not resolved_path.exists():
raise ValueError(f'Path does not exist: {path}')
logging.debug(f'Path validation successful: {resolved_path}')
return resolved_path
except Exception as e:
logging.error(f'Path validation failed for {path}: {e}')
raise ValueError(f'Invalid path: {path} - {e}')
def validate_package_name(name: str) -> str:
"""Validate and sanitize package name.
Args:
name: Package name to validate
Returns:
Validated package name
Raises:
ValueError: If package name is invalid
"""
if not name or not isinstance(name, str):
raise ValueError('Package name cannot be empty or non-string')
if len(name) > MAX_PACKAGE_NAME_LENGTH:
raise ValueError(
f'Package name exceeds maximum length ({MAX_PACKAGE_NAME_LENGTH}): {name}'
)
if not re.match(PACKAGE_NAME_REGEX, name):
raise ValueError(f'Invalid package name format: {name}')
suspicious_patterns = [
r'\.\.',
r'//',
r'\\\\',
r'[<>:"|?*]',
r'^\.', # Path traversal and invalid chars
r'(con|prn|aux|nul|com[1-9]|lpt[1-9])$', # Windows reserved names
]
for pattern in suspicious_patterns:
if re.search(pattern, name, re.IGNORECASE):
raise ValueError(f'Package name contains suspicious pattern: {name}')
logging.debug(f'Package name validation successful: {name}')
return name
def validate_version_format(version: str) -> bool:
"""Validate version follows semantic versioning with additional security checks.
Args:
version: Version string to validate
Returns:
True if valid, False otherwise
"""
if not version or not isinstance(version, str):
return False
if len(version) > 50:
return False
match = re.match(SemVerRegEx, version)
if not match:
return False
try:
major = int(match.group('major'))
minor = int(match.group('minor'))
patch = int(match.group('patch'))
if any(component > MAX_VERSION_COMPONENT for component in [major, minor, patch]):
logging.warning(
f'Version component exceeds maximum ({MAX_VERSION_COMPONENT}): {version}'
)
if major >= MAX_VERSION_COMPONENT:
logging.warning('Major version component is at maximum, failing validation')
return False # Bumping Major version back to zero doesn't make sense
return True # Allow large components for bumping to zero
except (ValueError, TypeError):
return False
return True
def secure_file_read(file_path: Path, encoding: str = 'utf-8') -> str:
"""Securely read file with validation.
Args:
file_path: Path to file
encoding: File encoding
Returns:
File content
Raises:
ValueError: If file cannot be read securely
"""
validated_path = validate_path_security(file_path)
try:
file_size = validated_path.stat().st_size
if file_size > 10 * 1024 * 1024: # 10MB limit
raise ValueError(f'File too large: {file_size} bytes')
with open(validated_path, 'r', encoding=encoding) as f:
content = f.read()
logging.debug(f'File read successful: {validated_path}')
return content
except Exception as e:
logging.error(f'Secure file read failed for {file_path}: {e}')
raise ValueError(f'Cannot read file securely: {file_path} - {e}')
def secure_file_write(file_path: Path, content: str, encoding: str = 'utf-8') -> None:
"""Securely write file with validation.
Args:
file_path: Path to file
content: Content to write
encoding: File encoding
Raises:
ValueError: If file cannot be written securely
"""
if not content or not isinstance(content, str):
raise ValueError('Content cannot be empty or non-string')
if len(content) > 10 * 1024 * 1024: # 10MB limit
raise ValueError(f'Content too large: {len(content)} characters')
try:
parent_dir = file_path.parent
validate_path_security(parent_dir)
with open(file_path, 'w', encoding=encoding) as f:
f.write(content)
file_path.chmod(0o644)
logging.debug(f'File write successful: {file_path}')
except Exception as e:
logging.error(f'Secure file write failed for {file_path}: {e}')
raise ValueError(f'Cannot write file securely: {file_path} - {e}')
class Package(Protocol):
"""The package protocol with security enhancements."""
path: Path
def package_name(self) -> str:
"""The package name."""
...
def package_version(self) -> str:
"""The package version."""
...
def bump_version(self) -> str:
"""Update the package version."""
...
@dataclass
class NpmPackage:
"""A NPM package with security enhancements."""
path: Path
def __post_init__(self):
"""Validate path on initialization."""
self.path = validate_path_security(self.path)
def package_name(self) -> str:
"""Get the package name from the package.json file with security validation."""
try:
package_json_path = self.path / 'package.json'
content = secure_file_read(package_json_path)
data = json.loads(content)
if 'name' not in data:
raise ValueError("No 'name' field in package.json")
name = str(data['name'])
return validate_package_name(name)
except Exception as e:
logging.error(f'Failed to get NPM package name from {self.path}: {e}')
raise ValueError(f'Cannot read NPM package name: {e}')
def package_version(self) -> str:
"""Get the package version from the package.json file with security validation."""
try:
package_json_path = self.path / 'package.json'
content = secure_file_read(package_json_path)
data = json.loads(content)
if 'version' not in data:
raise ValueError("No 'version' field in package.json")
version = str(data['version'])
if not validate_version_format(version):
raise ValueError(f'Invalid version format: {version}')
return version
except Exception as e:
logging.error(f'Failed to get NPM package version from {self.path}: {e}')
raise ValueError(f'Cannot read NPM package version: {e}')
def bump_version(self) -> str:
"""Update the package.json with a bumped version with security validation."""
try:
package_json_path = self.path / 'package.json'
content = secure_file_read(package_json_path)
data = json.loads(content)
current_version = str(data.get('version', ''))
if not validate_version_format(current_version):
raise ValueError(f'Invalid current version format: {current_version}')
matched = re.match(SemVerRegEx, current_version)
if not matched:
raise ValueError(f'Cannot parse version: {current_version}')
major = int(matched.group('major'))
minor = int(matched.group('minor'))
patch = int(matched.group('patch'))
patch += 1
if patch > MAX_VERSION_COMPONENT:
patch = 0
minor += 1
if minor > MAX_VERSION_COMPONENT:
minor = 0
major += 1
if major > MAX_VERSION_COMPONENT:
raise ValueError('Version overflow detected')
new_version = f'{major}.{minor}.{patch}'
if not validate_version_format(new_version):
raise ValueError(f'Generated invalid version: {new_version}')
data['version'] = new_version
updated_content = json.dumps(data, indent=2, ensure_ascii=False)
secure_file_write(package_json_path, updated_content)
logging.info(f'NPM package version bumped: {current_version} -> {new_version}')
return new_version
except Exception as e:
logging.error(f'Failed to bump NPM package version in {self.path}: {e}')
raise ValueError(f'Cannot bump NPM package version: {e}')
@dataclass
class PyPiPackage:
"""A PyPi package with security enhancements."""
path: Path
def __post_init__(self):
"""Validate path on initialization."""
self.path = validate_path_security(self.path)
def package_name(self) -> str:
"""Get the package name from the pyproject.toml file with security validation."""
try:
pyproject_path = self.path / 'pyproject.toml'
content = secure_file_read(pyproject_path)
toml_data = tomlkit.parse(content)
project_section = toml_data.get('project')
if not project_section:
raise ValueError('No project section in pyproject.toml')
name = project_section.get('name')
if not name:
raise ValueError('No name in pyproject.toml project section')
name_str = str(name)
return validate_package_name(name_str)
except Exception as e:
logging.error(f'Failed to get PyPI package name from {self.path}: {e}')
raise ValueError(f'Cannot read PyPI package name: {e}')
def package_version(self) -> str:
"""Read the version from the pyproject.toml file with security validation."""
try:
pyproject_path = self.path / 'pyproject.toml'
content = secure_file_read(pyproject_path)
toml_data = tomlkit.parse(content)
project_section = toml_data.get('project')
if not project_section:
raise ValueError('No project section in pyproject.toml')
version = project_section.get('version')
if not version:
raise ValueError('No version in pyproject.toml project section')
version_str = str(version)
if not validate_version_format(version_str):
raise ValueError(f'Invalid version format: {version_str}')
return version_str
except Exception as e:
logging.error(f'Failed to get PyPI package version from {self.path}: {e}')
raise ValueError(f'Cannot read PyPI package version: {e}')
def bump_version(self) -> str:
"""Update version in pyproject.toml and __init__.py with security validation."""
try:
package_name = self.package_name()
current_version = self.package_version()
matched = re.match(SemVerRegEx, current_version)
if not matched:
raise ValueError(f'Cannot parse version: {current_version}')
major = int(matched.group('major'))
minor = int(matched.group('minor'))
patch = int(matched.group('patch'))
patch += 1
if patch > MAX_VERSION_COMPONENT:
patch = 0
minor += 1
if minor > MAX_VERSION_COMPONENT:
minor = 0
major += 1
if major > MAX_VERSION_COMPONENT:
raise ValueError('Version overflow detected')
new_version = f'{major}.{minor}.{patch}'
if not validate_version_format(new_version):
raise ValueError(f'Generated invalid version: {new_version}')
pyproject_path = self.path / 'pyproject.toml'
content = secure_file_read(pyproject_path)
data = tomlkit.parse(content)
project_table = data.get('project')
if project_table is None:
raise ValueError('No project section in pyproject.toml')
project_table['version'] = new_version
updated_content = tomlkit.dumps(data)
secure_file_write(pyproject_path, updated_content)
if package_name.startswith('awslabs.'):
module_name = package_name[8:].replace('-', '_')
if not re.match(DIRECTORY_NAME_REGEX, module_name):
raise ValueError(f'Invalid module name derived from package: {module_name}')
init_file = self.path / 'awslabs' / module_name / '__init__.py'
try:
validate_path_security(init_file, self.path)
if init_file.exists():
init_content = secure_file_read(init_file)
version_pattern = (
r'__version__\s*=\s*(?P<start>[\'"])[^\'"]*(?P<end>[\'"])'
)
new_version_line = r'__version__ = \g<start>' + new_version + r'\g<end>'
if re.search(version_pattern, init_content):
updated_init_content = re.sub(
version_pattern, new_version_line, init_content
)
secure_file_write(init_file, updated_init_content)
click.echo(f"Updated {init_file}: __version__ = '{new_version}'")
else:
click.echo(f'Warning: No __version__ found in {init_file}')
else:
click.echo(f'Warning: {init_file} not found for package {package_name}')
except ValueError as e:
click.echo(f'Warning: Cannot update __init__.py safely: {e}')
else:
click.echo(
f"Warning: Package {package_name} doesn't follow awslabs.* naming convention"
)
logging.info(f'PyPI package version bumped: {current_version} -> {new_version}')
return new_version
except Exception as e:
logging.error(f'Failed to bump PyPI package version in {self.path}: {e}')
raise ValueError(f'Cannot bump PyPI package version: {e}')
@click.group()
def cli():
"""Release management CLI with security enhancements."""
pass
@cli.command('bump-package')
@click.option('--directory', type=click.Path(exists=True, path_type=Path), default=Path.cwd())
def bump_package(directory: Path) -> int:
"""Updates the package version with a patch bump and security validation."""
try:
validated_directory = validate_path_security(directory)
if not re.match(DIRECTORY_NAME_REGEX, validated_directory.name):
raise ValueError(f'Invalid directory name format: {validated_directory.name}')
logging.debug(f'Processing directory: {validated_directory}')
pyproject_file = validated_directory / 'pyproject.toml'
package_json_file = validated_directory / 'package.json'
processed = False
if pyproject_file.exists():
logging.debug(f'Found PyPI package at {validated_directory}')
try:
package = PyPiPackage(validated_directory)
name = package.package_name()
version = package.bump_version()
click.echo(f'{name}@{version}')
processed = True
except Exception as e:
logging.error(f'Failed to process PyPI package: {e}')
click.echo(f'Error processing PyPI package: {e}', err=True)
return 1
if package_json_file.exists():
logging.debug(f'Found NPM package at {validated_directory}')
try:
package = NpmPackage(validated_directory)
name = package.package_name()
version = package.bump_version()
click.echo(f'{name}@{version}')
processed = True
except Exception as e:
logging.error(f'Failed to process NPM package: {e}')
click.echo(f'Error processing NPM package: {e}', err=True)
return 1
if not processed:
error_msg = f'No supported package files found in {validated_directory}'
logging.error(error_msg)
click.echo(error_msg, err=True)
return 1
return 0
except Exception as e:
logging.error(f'Bump package failed: {e}')
click.echo(f'Error: {e}', err=True)
return 1
if __name__ == '__main__':
try:
sys.exit(cli())
except Exception as e:
logging.critical(f'Critical error in release script: {e}')
click.echo(f'Critical error: {e}', err=True)
sys.exit(1)
================================================
FILE: .github/workflows/release.yml
================================================
---
name: Release Deploy (approvals)
description: |
This workflow drafts a release when a tag is pushed to the repository.
It checks for changes in specific directories and publishes packages to PyPI and npmjs if there are changes.
The release is created when the jobs succeed, and it includes generated release notes.
NOTE: The tag format must match `YYYY.MM.YYYYMMDDHHIISS` to complete a "Release"
This workflow is intended for a protected environment for approval or rejection.
on:
push:
tags:
- '[0-9][0-9][0-9][0-9].[0-9]+.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
permissions:
actions: none
attestations: none
checks: none
contents: none
deployments: none
discussions: none
id-token: none
issues: none
models: none
packages: none
pages: none
pull-requests: none
repository-projects: none
security-events: none
statuses: none
jobs:
validate-repository:
name: Validate Repository
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: read
outputs:
is-authorized-repo: ${{ steps.validate-repo.outputs.is-authorized-repo }}
steps:
- name: Validate repository and tag
id: validate-repo
run: |
set -euo pipefail
CURRENT_REPO="${{ github.repository }}"
AUTHORIZED_REPO="${{ vars.REPOSITORY || 'awslabs/mcp' }}"
TAG_NAME="${{ github.ref_name }}"
echo "::debug::Validating repository: $CURRENT_REPO"
echo "::debug::Authorized repository: $AUTHORIZED_REPO"
echo "::debug::Tag: $TAG_NAME"
# Validate tag format
if [[ ! "$TAG_NAME" =~ ^[0-9]{4}\.[0-9]+\.[0-9]{14}$ ]]; then
echo "::error::Invalid tag format: $TAG_NAME" >&2
echo "::error::Expected format: YYYY.MM.YYYYMMDDHHIISS" >&2
exit 1
fi
# Check repository authorization
if [[ "$CURRENT_REPO" == "$AUTHORIZED_REPO" ]]; then
echo "is-authorized-repo=true" >> $GITHUB_OUTPUT
echo "::debug::Repository authorized for release"
else
echo "is-authorized-repo=false" >> $GITHUB_OUTPUT
echo "::debug::Repository not authorized for release: $CURRENT_REPO"
fi
skip-unauthorized:
name: Skip Unauthorized Repository
if: needs.validate-repository.outputs.is-authorized-repo != 'true'
runs-on: ubuntu-latest
timeout-minutes: 1
needs: [validate-repository]
steps:
- name: Skip unauthorized repository
run: |
echo "::debug::Intentionally skipped - not intended to be run outside '${{ vars.REPOSITORY || 'awslabs/mcp' }}'"
echo "::debug::Current repository: ${{ github.repository }}"
draft_release_when_tagged:
name: Draft Release
if: needs.validate-repository.outputs.is-authorized-repo == 'true'
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: write
needs: [validate-repository,look-for-changes]
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Draft release with validation
id: draft-release
env:
GH_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
run: |
set -euo pipefail
VERSION="${{ github.ref_name }}"
echo "::debug::Creating draft release for version: $VERSION"
# Validate version format again
if [[ ! "$VERSION" =~ ^[0-9]{4}\.[0-9]+\.[0-9]{14}$ ]]; then
echo "::error::Invalid version format: $VERSION" >&2
exit 1
fi
# Check if release already exists
if gh release view "$VERSION" >/dev/null 2>&1; then
echo "::error::Release already exists: $VERSION" >&2
exit 1
fi
# Create draft release with validation
gh release create "$VERSION" \
--generate-notes \
--draft \
--verify-tag
# Generate and update release notes
echo "# $VERSION" > RELEASE_NOTES.md
gh release view "$VERSION" --json body | jq -r '.body' > GENERATED_NOTES.md
# Update release with combined notes
cat RELEASE_NOTES.md GENERATED_NOTES.md | gh release edit "$VERSION" \
--draft=true \
--notes-file -
echo "::debug::Successfully created draft release: $VERSION"
look-for-changes:
name: Look for Changes Since Last Published Release
if: needs.validate-repository.outputs.is-authorized-repo == 'true'
env:
SRC_DIRECTORY: ${{ vars.SRC_DIRECTORY || secrets.SRC_DIRECTORY || 'src' }}
outputs:
changed-directories: ${{ steps.find-changed-directories.outputs.changed-directories }}
python-changed-directories: ${{ steps.find-changed-directories.outputs.python-changed-directories }}
node-changed-directories: ${{ steps.find-changed-directories.outputs.node-changed-directories }}
docker-changed-directories: ${{ steps.find-changed-directories.outputs.docker-changed-directories }}
permissions:
contents: read
runs-on: ubuntu-latest
timeout-minutes: 5
needs: [validate-repository]
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
token: ${{ secrets.BOT_GITHUB_TOKEN }}
fetch-depth: 0
- name: Validate source directory
run: |
set -euo pipefail # SECURITY: Strict error handling
SRC_DIR="${{ env.SRC_DIRECTORY }}"
echo "::debug::Validating source directory: $SRC_DIR"
# Validate directory name format
if [[ ! "$SRC_DIR" =~ ^[a-zA-Z0-9_-]+$ ]]; then
echo "::error::Invalid source directory format: $SRC_DIR" >&2
exit 1
fi
# Check if directory exists
if [[ ! -d "$SRC_DIR" ]]; then
echo "::error::Source directory does not exist: $SRC_DIR" >&2
exit 1
fi
echo "::debug::Source directory validated: $SRC_DIR"
- name: Find Changed Directories Since Last Published Release
id: find-changed-directories
env:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
run: |
set -euo pipefail
echo "::debug::Finding changed directories since last published release"
# Get last published release with validation
SINCE="$(gh release list --exclude-drafts --exclude-pre-releases --limit 1 --json tagName | jq -r '.[].tagName // empty')"
if [[ -z "$SINCE" ]]; then
echo "::warning::No previous published release found, using initial commit" >&2
SINCE="$(git rev-list --max-parents=0 HEAD)"
else
echo "::debug::Comparing against published release: $SINCE"
# Validate tag exists
if ! git rev-parse "$SINCE" >/dev/null 2>&1; then
echo "::error::Published release tag does not exist in repository: $SINCE" >&2
exit 1
fi
fi
# Get changed files with validation
CHANGED_FILES="$(git diff --name-only "$SINCE" HEAD | sed 's/^\.\///' | jq -R -s -c 'split("\n")[:-1]')"
# Filter and validate source directories
SRC_DIRECTORIES="$(echo "$CHANGED_FILES" | jq -r --arg src "${{ env.SRC_DIRECTORY }}" \
'.[] | select(. | startswith($src + "/"))' | \
cut -d'/' -f2 | \
sort -u | \
while IFS= read -r dir; do
# Validate directory name format
if [[ "$dir" =~ ^[a-zA-Z0-9_-]+$ ]] && [[ -n "$dir" ]]; then
# Check if DO_NOT_RELEASE file exists
if [[ -f "${{ env.SRC_DIRECTORY }}/$dir/DO_NOT_RELEASE" ]]; then
echo "::warning::Skipping because DO_NOT_RELEASE: $dir" >&2
else
echo "$dir"
fi
else
echo "::warning::Skipping invalid directory name: $dir" >&2
fi
done | \
jq -R -s -c 'split("\n")[:-1] | map(select(length > 0))')"
echo "changed-directories=$SRC_DIRECTORIES" >> $GITHUB_OUTPUT
# Find Python packages with validation
PYTHON_CHANGED_DIRECTORIES="$(echo "$SRC_DIRECTORIES" | jq -r '.[]' | \
while IFS= read -r dir; do
if [[ -f "${{ env.SRC_DIRECTORY }}/$dir/pyproject.toml" ]]; then
echo "$dir"
fi
done | \
jq -R -s -c 'split("\n")[:-1] | map(select(length > 0))')"
# Find Node packages with validation
NODE_CHANGED_DIRECTORIES="$(echo "$SRC_DIRECTORIES" | jq -r '.[]' | \
while IFS= read -r dir; do
if [[ -f "${{ env.SRC_DIRECTORY }}/$dir/package.json" ]]; then
echo "$dir"
fi
done | \
jq -R -s -c 'split("\n")[:-1] | map(select(length > 0))')"
# Find Docker packages with validation
DOCKER_CHANGED_DIRECTORIES="$(echo "$SRC_DIRECTORIES" | jq -r '.[]' | \
while IFS= read -r dir; do
if [[ -f "${{ env.SRC_DIRECTORY }}/$dir/Dockerfile" ]]; then
echo "$dir"
fi
done | \
jq -R -s -c 'split("\n")[:-1] | map(select(length > 0))')"
echo "python-changed-directories=$PYTHON_CHANGED_DIRECTORIES" >> $GITHUB_OUTPUT
echo "node-changed-directories=$NODE_CHANGED_DIRECTORIES" >> $GITHUB_OUTPUT
echo "docker-changed-directories=$DOCKER_CHANGED_DIRECTORIES" >> $GITHUB_OUTPUT
echo "::debug::Found changed directories: $SRC_DIRECTORIES"
echo "::debug::Python packages: $PYTHON_CHANGED_DIRECTORIES"
echo "::debug::Node packages: $NODE_CHANGED_DIRECTORIES"
echo "::debug::Docker packages: $DOCKER_CHANGED_DIRECTORIES"
publish-npmjs:
name: Publish to NPMjs
if: needs.validate-repository.outputs.is-authorized-repo == 'true' && needs.look-for-changes.outputs.node-changed-directories != '[]' && needs.look-for-changes.outputs.node-changed-directories != ''
env:
SRC_DIRECTORY: ${{ vars.SRC_DIRECTORY || secrets.SRC_DIRECTORY || 'src' }}
strategy:
fail-fast: false
matrix:
changed-directory: ${{ fromJson(needs.look-for-changes.outputs.node-changed-directories) }}
max-parallel: 10
runs-on: ubuntu-latest
timeout-minutes: 1
permissions:
contents: read
needs: [validate-repository, draft_release_when_tagged, look-for-changes]
steps:
- name: Validate package directory
run: |
set -euo pipefail
CHANGED_DIR="${{ matrix.changed-directory }}"
echo "::debug::Validating Node.js package directory: $CHANGED_DIR"
# Validate directory name format
if [[ ! "$CHANGED_DIR" =~ ^[a-zA-Z0-9_-]+$ ]]; then
echo "::error::Invalid directory name format: $CHANGED_DIR" >&2
exit 1
fi
echo "::debug::Directory validated: $CHANGED_DIR"
publish-pypi:
name: Publish to PyPI
if: needs.validate-repository.outputs.is-authorized-repo == 'true' && needs.look-for-changes.outputs.python-changed-directories != '[]' && needs.look-for-changes.outputs.python-changed-directories != ''
env:
SRC_DIRECTORY: ${{ vars.SRC_DIRECTORY || secrets.SRC_DIRECTORY || 'src' }}
environment:
name: release
url: https://pypi.org/project/awslabs.${{ matrix.changed-directory }}
strategy:
fail-fast: false
matrix:
changed-directory: ${{ fromJson(needs.look-for-changes.outputs.python-changed-directories) }}
max-parallel: 10
runs-on: ubuntu-latest
timeout-minutes: 240 # allow time for large packages but prevent hanging
permissions:
contents: read
id-token: write
needs: [validate-repository, draft_release_when_tagged, look-for-changes]
steps:
# Clear up space for specific large projects
- name: Clear Up Space (Aggressively) for Specific Projects
if: contains(fromJson('["core-mcp-server"]'), matrix.changed-directory)
uses: awslabs/mcp/.github/actions/clear-space-ubuntu-latest-agressively@11841059cfcc830c367325450a1898ebffef6e01
#TODO: remove local action checkout when working...
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
token: ${{ secrets.BOT_GITHUB_TOKEN }}
sparse-checkout: |
${{ env.SRC_DIRECTORY }}/${{ matrix.changed-directory }}
./.github/actions/build-and-push-container-image
- name: Validate package directory
run: |
set -euo pipefail
CHANGED_DIR="${{ matrix.changed-directory }}"
FULL_PATH="${{ env.SRC_DIRECTORY }}/$CHANGED_DIR"
echo "::debug::Validating Python package directory: $FULL_PATH"
# Validate directory name format
if [[ ! "$CHANGED_DIR" =~ ^[a-zA-Z0-9_-]+$ ]]; then
echo "::error::Invalid directory name format: $CHANGED_DIR" >&2
exit 1
fi
# Check if directory exists
if [[ ! -d "$FULL_PATH" ]]; then
echo "::error::Directory does not exist: $FULL_PATH" >&2
exit 1
fi
# Validate pyproject.toml exists
if [[ ! -f "$FULL_PATH/pyproject.toml" ]]; then
echo "::error::pyproject.toml not found in: $FULL_PATH" >&2
exit 1
fi
# Check for path traversal attempts
RESOLVED_PATH="$(realpath "$FULL_PATH")"
EXPECTED_PREFIX="$(realpath "${{ env.SRC_DIRECTORY }}")"
if [[ ! "$RESOLVED_PATH" == "$EXPECTED_PREFIX"/* ]]; then
echo "::error::Path traversal detected: $FULL_PATH" >&2
exit 1
fi
echo "::debug::Directory validated: $FULL_PATH"
- name: Install uv
uses: astral-sh/setup-uv@eac588ad8def6316056a12d4907a9d4d84ff7a3b # v7.3.0
- name: Build package
working-directory: ${{ env.SRC_DIRECTORY }}/${{ matrix.changed-directory }}
run: |
set -euo pipefail
echo "::debug::Building package: ${{ matrix.changed-directory }}"
uv build
echo "::debug::Package build completed"
- name: Get Version from Package
id: get-package-version
working-directory: ${{ env.SRC_DIRECTORY }}/${{ matrix.changed-directory }}
run: |
set -euo pipefail
# Get version with validation
VERSION="$(uv tree 2>/dev/null | grep awslabs | sed -e 's/^.*[[:space:]]v\(.*\)/\1/g' | head -1)"
if [[ -z "$VERSION" ]]; then
echo "::error::Failed to extract version for: ${{ matrix.changed-directory }}" >&2
exit 1
fi
# Validate version format
if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "::error::Invalid version format: $VERSION" >&2
exit 1
fi
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "::debug::Package version: $VERSION"
- name: Publish package to PyPI
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
with:
packages-dir: ${{ env.SRC_DIRECTORY }}/${{ matrix.changed-directory }}/dist
print-hash: true
- name: Build and Publish Container
id: build-and-publish
uses: ./.github/actions/build-and-push-container-image
if: hashFiles(format('./{0}/{1}/Dockerfile', env.SRC_DIRECTORY, matrix.changed-directory))
with:
image: ${{ matrix.changed-directory }}
version: ${{ steps.get-package-version.outputs.version }}
public-erc-role-to-assume: ${{ secrets.AWS_ROLE_ARN_TO_ASSUME || 'arn:aws:iam::444455556666:role/Admin' }}
public-erc-registry-alias: ${{ vars.REGISTRY_ALIAS || 'awslabs-mcp' }}
public-erc-aws-region: ${{ env.AWS_REGION || 'us-east-1' }}
- name: Distributions Summary
working-directory: ${{ env.SRC_DIRECTORY }}/${{ matrix.changed-directory }}
run: |
set -euo pipefail
echo "::debug::Publishing completed for: ${{ matrix.changed-directory }}"
echo "::debug::Distribution files:"
ls -la dist/ || echo "No dist directory found"
echo "### :package: Published" >> $GITHUB_STEP_SUMMARY
echo "* [PyPi](https://pypi.org/project/awslabs.${{ matrix.changed-directory }})" >> $GITHUB_STEP_SUMMARY
echo "::debug::Docker images:"
docker images || echo "No Docker images found"
echo "* [Public ECR](https://gallery.ecr.aws/awslabs-mcp/awslabs/${{ matrix.changed-directory }} (if applicable)" >> $GITHUB_STEP_SUMMARY
release_when_successful:
name: Publish Release
if: needs.validate-repository.outputs.is-authorized-repo == 'true' && !failure() && !cancelled() && (needs.publish-npmjs.result == 'success' || needs.publish-pypi.result == 'success' || (needs.publish-npmjs.result == 'skipped' && needs.publish-pypi.result == 'skipped'))
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: write
needs: [validate-repository, draft_release_when_tagged, publish-pypi, publish-npmjs]
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Publish release
id: create-release
env:
GH_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
run: |
set -euo pipefail
VERSION="${{ github.ref_name }}"
echo "::debug::Publishing release: $VERSION"
# Validate version format
if [[ ! "$VERSION" =~ ^[0-9]{4}\.[0-9]+\.[0-9]{14}$ ]]; then
echo "::error::Invalid version format: $VERSION" >&2
exit 1
fi
# Verify draft release exists
if ! gh release view "$VERSION" --json isDraft | jq -e '.isDraft == true' >/dev/null; then
echo "::error::Draft release not found or already published: $VERSION" >&2
exit 1
fi
# Publish the release
gh release edit "$VERSION" --draft=false
echo "::debug::Successfully published release: $VERSION"
echo "### :rocket: Released" >> $GITHUB_STEP_SUMMARY
echo "[$VERSION](https://github.com/${{ github.repository }}/releases/tag/$VERSION)" >> $GITHUB_STEP_SUMMARY
================================================
FILE: .github/workflows/scanners.yml
================================================
name: Scanners
on:
push:
pull_request:
workflow_dispatch:
permissions: {}
jobs:
secrets-scanner:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 #v6.2.0
with:
python-version: '3'
- run: |
pip install --require-hashes --requirement .github/workflows/detect-secrets-requirements.txt
- name: detect-secrets
id: detect-secrets
run: | # pragma: allowlist secret
detect-secrets scan --baseline .secrets.baseline
cat .secrets.baseline | jq '[.results|to_entries|.[].value[]|{ "filename": .filename, "is_secret": .is_secret } | if .is_secret == null or .is_secret == true then .filename else empty end]|unique|if length>0 then error("potential secrets in: \(.)") else empty end'
================================================
FILE: .github/workflows/scorecard-analysis.yml
================================================
name: Scorecard analysis workflow
on:
push:
# Only the default branch is supported.
branches:
- main
schedule:
# Weekly on Thursdays.
- cron: '30 1 * * 4'
permissions: {}
jobs:
analysis:
name: Scorecard analysis
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
id-token: write
steps:
- name: "Checkout code"
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: "Run analysis"
uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
with:
results_file: scorecard-results.sarif
results_format: sarif
# Scorecard team runs a weekly scan of public GitHub repos,
# see https://github.com/ossf/scorecard#public-data.
# Setting `publish_results: true` helps us scale by leveraging your workflow to
# extract the results instead of relying on our own infrastructure to run scans.
# And it's free for you!
publish_results: true
# Upload the results as artifacts (optional). Commenting out will disable
# uploads of run results in SARIF format to the repository Actions tab.
# https://docs.github.com/en/actions/advanced-guides/storing-workflow-data-as-artifacts
- name: "Upload artifact"
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: SARIF file
path: scorecard-results.sarif
retention-days: 12
# Upload the results to GitHub's code scanning dashboard (optional).
# Commenting out will disable upload of results to your repo's Code Scanning dashboard
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@c0fc915677567258ee3c194d03ffe7ae3dc8d741 # v4.31.9
with:
sarif_file: scorecard-results.sarif
================================================
FILE: .github/workflows/semgrep-requirements.txt
================================================
# This file was autogenerated by uv via the following command:
# uv pip compile --no-cache --universal --generate-hashes --annotate --allow-unsafe --output-file .github/workflows/semgrep-requirements.txt .github/workflows/semgrep-requirements.in
attrs==25.3.0 \
--hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 \
--hash=sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b
# via
# glom
# jsonschema
# referencing
# semgrep
boltons==21.0.0 \
--hash=sha256:65e70a79a731a7fe6e98592ecfb5ccf2115873d01dbc576079874629e5c90f13 \
--hash=sha256:b9bb7b58b2b420bbe11a6025fdef6d3e5edc9f76a42fb467afe7ca212ef9948b
# via
# face
# glom
# semgrep
bracex==2.6 \
--hash=sha256:0b0049264e7340b3ec782b5cb99beb325f36c3782a32e36e876452fd49a09952 \
--hash=sha256:98f1347cd77e22ee8d967a30ad4e310b233f7754dbf31ff3fceb76145ba47dc7
# via wcmatch
certifi==2025.6.15 \
--hash=sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057 \
--hash=sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b
# via requests
charset-normalizer==3.4.2 \
--hash=sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4 \
--hash=sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45 \
--hash=sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7 \
--hash=sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0 \
--hash=sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7 \
--hash=sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d \
--hash=sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d \
--hash=sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0 \
--hash=sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184 \
--hash=sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db \
--hash=sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b \
--hash=sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64 \
--hash=sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b \
--hash=sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8 \
--hash=sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff \
--hash=sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344 \
--hash=sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58 \
--hash=sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e \
--hash=sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471 \
--hash=sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148 \
--hash=sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a \
--hash=sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836 \
--hash=sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e \
--hash=sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63 \
--hash=sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c \
--hash=sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1 \
--hash=sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01 \
--hash=sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366 \
--hash=sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58 \
--hash=sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5 \
--hash=sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c \
--hash=sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2 \
--hash=sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a \
--hash=sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597 \
--hash=sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b \
--hash=sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5 \
--hash=sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb \
--hash=sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f \
--hash=sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0 \
--hash=sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941 \
--hash=sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0 \
--hash=sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86 \
--hash=sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7 \
--hash=sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7 \
--hash=sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455 \
--hash=sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6 \
--hash=sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4 \
--hash=sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0 \
--hash=sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3 \
--hash=sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1 \
--hash=sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6 \
--hash=sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981 \
--hash=sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c \
--hash=sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980 \
--hash=sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645 \
--hash=sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7 \
--hash=sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12 \
--hash=sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa \
--hash=sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd \
--hash=sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef \
--hash=sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f \
--hash=sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2 \
--hash=sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d \
--hash=sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5 \
--hash=sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02 \
--hash=sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3 \
--hash=sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd \
--hash=sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e \
--hash=sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214 \
--hash=sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd \
--hash=sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a \
--hash=sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c \
--hash=sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681 \
--hash=sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba \
--hash=sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f \
--hash=sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a \
--hash=sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28 \
--hash=sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691 \
--hash=sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82 \
--hash=sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a \
--hash=sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027 \
--hash=sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7 \
--hash=sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518 \
--hash=sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf \
--hash=sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b \
--hash=sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9 \
--hash=sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544 \
--hash=sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da \
--hash=sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509 \
--hash=sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f \
--hash=sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a \
--hash=sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f
# via requests
click==8.1.8 \
--hash=sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 \
--hash=sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a
# via
# click-option-group
# semgrep
click-option-group==0.5.7 \
--hash=sha256:8dc780be038712fc12c9fecb3db4fe49e0d0723f9c171d7cda85c20369be693c \
--hash=sha256:96b9f52f397ef4d916f81929bd6c1f85e89046c7a401a64e72a61ae74ad35c24
# via semgrep
colorama==0.4.6 \
--hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
--hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
# via
# click
# semgrep
defusedxml==0.7.1 \
--hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \
--hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61
# via semgrep
deprecated==1.2.18 \
--hash=sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d \
--hash=sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec
# via
# opentelemetry-api
# opentelemetry-exporter-otlp-proto-http
exceptiongroup==1.2.2 \
--hash=sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b \
--hash=sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc
# via semgrep
face==24.0.0 \
--hash=sha256:0e2c17b426fa4639a4e77d1de9580f74a98f4869ba4c7c8c175b810611622cd3 \
--hash=sha256:611e29a01ac5970f0077f9c577e746d48c082588b411b33a0dd55c4d872949f6
# via glom
glom==22.1.0 \
--hash=sha256:1510c6587a8f9c64a246641b70033cbc5ebde99f02ad245693678038e821aeb5 \
--hash=sha256:5339da206bf3532e01a83a35aca202960ea885156986d190574b779598e9e772
# via semgrep
googleapis-common-protos==1.70.0 \
--hash=sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257 \
--hash=sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8
# via opentelemetry-exporter-otlp-proto-http
idna==3.10 \
--hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \
--hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3
# via requests
importlib-metadata==7.1.0 \
--hash=sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40c
gitextract_w282c33h/ ├── .devcontainer/ │ └── devcontainer.json ├── .github/ │ ├── CODEOWNERS │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── documentation.yml │ │ ├── feature_request.yml │ │ ├── rfc.yml │ │ └── support_awslabs_mcp_servers.yml │ ├── SECURITY │ ├── SUPPORT │ ├── actions/ │ │ ├── build-and-push-container-image/ │ │ │ └── action.yml │ │ └── clear-space-ubuntu-latest-agressively/ │ │ └── action.yml │ ├── codecov.yml │ ├── dependabot.yml │ ├── pull_request_template.md │ └── workflows/ │ ├── RELEASE_INSTRUCTIONS.md │ ├── 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-slash.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-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 ├── .vex/ │ └── CVE-2023-45853.openvex.json ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── DESIGN_GUIDELINES.md ├── DEVELOPER_GUIDE.md ├── LICENSE ├── NOTICE ├── README.md ├── VIBE_CODING_TIPS_TRICKS.md ├── docs/ │ ├── migration-bedrock-data-automation.md │ ├── migration-ccapi.md │ ├── migration-cfn.md │ ├── migration-cloudwatch-appsignals.md │ ├── migration-core.md │ ├── migration-cost-explorer.md │ ├── migration-diagram.md │ ├── migration-git-repo-research.md │ ├── migration-nova-canvas.md │ └── migration-terraform.md ├── docusaurus/ │ ├── .gitignore │ ├── README.md │ ├── 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-kendra-index-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-iac-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-network-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-applicationsignals-mcp-server.md │ │ │ ├── cloudwatch-mcp-server.md │ │ │ ├── code-doc-gen-mcp-server.md │ │ │ ├── core-mcp-server.md │ │ │ ├── cost-explorer-mcp-server.md │ │ │ ├── document-loader-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 │ │ │ ├── healthimaging-mcp-server.md │ │ │ ├── healthlake-mcp-server.md │ │ │ ├── iam-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 │ │ │ ├── sagemaker-ai-mcp-server.md │ │ │ ├── sagemaker-unified-studio-spark-troubleshooting-mcp-server.md │ │ │ ├── sagemaker-unified-studio-spark-upgrade-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.json │ ├── 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/ │ │ └── server-cards.json │ └── tsconfig.json ├── samples/ │ ├── README.md │ ├── mcp-integration-with-kb/ │ │ ├── .python-version │ │ ├── README.md │ │ ├── clients/ │ │ │ └── client_server.py │ │ ├── pyproject.toml │ │ └── user_interfaces/ │ │ └── chat_bedrock_st.py │ ├── mcp-integration-with-nova-canvas/ │ │ ├── .python-version │ │ ├── README.md │ │ ├── clients/ │ │ │ └── client_server.py │ │ ├── pyproject.toml │ │ └── user_interfaces/ │ │ └── image_generator_st.py │ └── 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_awslabs_init.py │ ├── verify_package_name.py │ └── verify_tool_names.py ├── src/ │ ├── amazon-bedrock-agentcore-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── SECURITY.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── amazon_bedrock_agentcore_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── config.py │ │ │ ├── server.py │ │ │ ├── tools/ │ │ │ │ ├── __init__.py │ │ │ │ ├── browser/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── browser_client.py │ │ │ │ │ ├── connection_manager.py │ │ │ │ │ ├── error_handler.py │ │ │ │ │ ├── interaction.py │ │ │ │ │ ├── management.py │ │ │ │ │ ├── models.py │ │ │ │ │ ├── navigation.py │ │ │ │ │ ├── observation.py │ │ │ │ │ ├── session.py │ │ │ │ │ └── snapshot_manager.py │ │ │ │ ├── docs.py │ │ │ │ ├── gateway.py │ │ │ │ ├── memory.py │ │ │ │ └── runtime.py │ │ │ └── utils/ │ │ │ ├── __init__.py │ │ │ ├── cache.py │ │ │ ├── doc_fetcher.py │ │ │ ├── indexer.py │ │ │ ├── text_processor.py │ │ │ └── url_validator.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── browser/ │ │ │ │ ├── __init__.py │ │ │ │ ├── conftest.py │ │ │ │ ├── test_integ_browser_session.py │ │ │ │ ├── test_integ_mcp_protocol.py │ │ │ │ ├── test_unit_browser_client.py │ │ │ │ ├── test_unit_connection.py │ │ │ │ ├── test_unit_error_handler.py │ │ │ │ ├── test_unit_interaction.py │ │ │ │ ├── test_unit_management.py │ │ │ │ ├── test_unit_server_integration.py │ │ │ │ ├── test_unit_session.py │ │ │ │ └── test_unit_snapshot.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_tools.py │ │ │ └── test_url_validator.py │ │ └── uv-requirements.txt │ ├── amazon-kendra-index-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── amazon_kendra_index_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── server.py │ │ │ └── util.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── test_init.py │ │ │ ├── test_main.py │ │ │ └── test_server.py │ │ └── uv-requirements.txt │ ├── amazon-keyspaces-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── amazon_keyspaces_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── client.py │ │ │ ├── config.py │ │ │ ├── consts.py │ │ │ ├── llm_context.py │ │ │ ├── models.py │ │ │ ├── server.py │ │ │ └── services.py │ │ ├── pyproject.toml │ │ ├── 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 │ ├── amazon-mq-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── 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 │ │ ├── docker-healthcheck.sh │ │ ├── example/ │ │ │ └── sample_mcp_q_cli.json │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── .gitignore │ │ │ ├── __init__.py │ │ │ ├── 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 │ ├── amazon-neptune-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── amazon_neptune_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── exceptions.py │ │ │ ├── graph_store/ │ │ │ │ ├── __init__.py │ │ │ │ ├── analytics.py │ │ │ │ ├── base.py │ │ │ │ └── database.py │ │ │ ├── models.py │ │ │ ├── neptune.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── 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 │ ├── amazon-qbusiness-anonymous-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── amazon_qbusiness_anonymous_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── clients.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_init.py │ │ │ ├── test_main.py │ │ │ └── test_server.py │ │ └── uv-requirements.txt │ ├── amazon-qindex-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── amazon_qindex_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── clients.py │ │ │ └── server.py │ │ ├── pyproject.toml │ │ └── tests/ │ │ ├── test_clients.py │ │ ├── test_init.py │ │ ├── test_main.py │ │ └── test_server.py │ ├── amazon-sns-sqs-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── amazon_sns_sqs_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── common.py │ │ │ ├── consts.py │ │ │ ├── generator.py │ │ │ ├── server.py │ │ │ ├── sns.py │ │ │ └── sqs.py │ │ ├── docker-healthcheck.sh │ │ ├── print_tools.py │ │ ├── pyproject.toml │ │ ├── run_tests.sh │ │ ├── tests/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── test_common.py │ │ │ ├── test_generator.py │ │ │ ├── test_server.py │ │ │ ├── test_sns.py │ │ │ └── test_sqs.py │ │ └── uv-requirements.txt │ ├── aurora-dsql-mcp-server/ │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── .pre-commit-config.yaml │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── aurora_dsql_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── consts.py │ │ │ ├── mutable_sql_detector.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── kiro_power/ │ │ │ ├── POWER.md │ │ │ ├── mcp.json │ │ │ └── steering/ │ │ │ ├── access-control.md │ │ │ ├── ddl-migrations.md │ │ │ ├── development-guide.md │ │ │ ├── dsql-examples.md │ │ │ ├── language.md │ │ │ ├── mcp-setup.md │ │ │ ├── mysql-to-dsql-migrations.md │ │ │ ├── onboarding.md │ │ │ └── troubleshooting.md │ │ ├── pyproject.toml │ │ ├── skills/ │ │ │ ├── README.md │ │ │ ├── amazon-aurora-dsql-skill/ │ │ │ │ └── SKILL.md │ │ │ ├── aurora-dsql-skill/ │ │ │ │ └── SKILL.md │ │ │ ├── aws-dsql-skill/ │ │ │ │ └── SKILL.md │ │ │ ├── claude_skill_setup.md │ │ │ ├── distributed-postgres-skill/ │ │ │ │ └── SKILL.md │ │ │ ├── distributed-sql-skill/ │ │ │ │ └── SKILL.md │ │ │ └── dsql-skill/ │ │ │ ├── SKILL.md │ │ │ ├── mcp/ │ │ │ │ ├── .mcp.json │ │ │ │ ├── mcp-setup.md │ │ │ │ └── mcp-tools.md │ │ │ ├── references/ │ │ │ │ ├── access-control.md │ │ │ │ ├── ddl-migrations.md │ │ │ │ ├── development-guide.md │ │ │ │ ├── dsql-examples.md │ │ │ │ ├── language.md │ │ │ │ ├── mysql-to-dsql-migrations.md │ │ │ │ ├── onboarding.md │ │ │ │ └── troubleshooting.md │ │ │ └── scripts/ │ │ │ ├── README.md │ │ │ ├── cluster-info.sh │ │ │ ├── create-cluster.sh │ │ │ ├── delete-cluster.sh │ │ │ ├── list-clusters.sh │ │ │ ├── loader.sh │ │ │ └── psql-connect.sh │ │ ├── test_tools.md │ │ ├── tests/ │ │ │ ├── test_connection_reuse.py │ │ │ ├── test_error_paths.py │ │ │ ├── test_graceful_startup.py │ │ │ ├── test_init.py │ │ │ ├── test_main.py │ │ │ ├── test_profile_option.py │ │ │ ├── test_proxy_tools.py │ │ │ ├── test_readonly_enforcement.py │ │ │ └── test_server.py │ │ └── uv-requirements.txt │ ├── aws-api-mcp-server/ │ │ ├── .gitattributes │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── CONTRIBUTING.md │ │ ├── DEPLOYMENT.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── 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.py │ │ │ │ │ ├── command_metadata.py │ │ │ │ │ ├── config.py │ │ │ │ │ ├── errors.py │ │ │ │ │ ├── file_system_controls.py │ │ │ │ │ ├── help_command.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 │ │ │ │ │ │ ├── s3_express_one_validator.py │ │ │ │ │ │ └── ssm_validator.py │ │ │ │ │ ├── interpretation.py │ │ │ │ │ ├── lexer.py │ │ │ │ │ └── parser.py │ │ │ │ ├── py.typed │ │ │ │ └── security/ │ │ │ │ ├── __init__.py │ │ │ │ ├── aws_api_customization.json │ │ │ │ └── policy.py │ │ │ ├── middleware/ │ │ │ │ ├── __init__.py │ │ │ │ └── http_header_validation_middleware.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── 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_regions.py │ │ │ │ ├── test_service.py │ │ │ │ └── test_services.py │ │ │ ├── common/ │ │ │ │ ├── test_command.py │ │ │ │ ├── test_config.py │ │ │ │ ├── test_file_system_controls.py │ │ │ │ ├── test_help_command.py │ │ │ │ ├── test_helpers.py │ │ │ │ └── test_models.py │ │ │ ├── fixtures.py │ │ │ ├── history_handler.py │ │ │ ├── metadata/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_read_only_operations_list.py │ │ │ ├── middleware/ │ │ │ │ └── test_http_header_validation_middleware.py │ │ │ ├── parser/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_lexer.py │ │ │ │ ├── test_parser.py │ │ │ │ ├── test_parser_customizations.py │ │ │ │ └── test_parser_file_access.py │ │ │ ├── test_security_policy.py │ │ │ └── test_server.py │ │ └── uv-requirements.txt │ ├── aws-appsync-mcp-server/ │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── aws_appsync_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── decorators.py │ │ │ ├── helpers.py │ │ │ ├── operations/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_api.py │ │ │ │ ├── create_api_cache.py │ │ │ │ ├── create_api_key.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.py │ │ │ │ ├── create_api_cache.py │ │ │ │ ├── create_api_key.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 │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_all_create_tools_write_protection.py │ │ │ ├── test_create_api.py │ │ │ ├── test_create_api_cache.py │ │ │ ├── test_create_api_key.py │ │ │ ├── test_create_channel_namespace.py │ │ │ ├── test_create_datasource.py │ │ │ ├── test_create_datasource_tool.py │ │ │ ├── test_create_domain_name.py │ │ │ ├── test_create_function.py │ │ │ ├── test_create_graphql_api.py │ │ │ ├── test_create_resolver.py │ │ │ ├── test_create_schema.py │ │ │ ├── test_create_schema_tool.py │ │ │ ├── test_helpers.py │ │ │ ├── test_server.py │ │ │ ├── test_validators.py │ │ │ └── test_write_operation.py │ │ └── uv-requirements.txt │ ├── aws-bedrock-custom-model-import-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── 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 │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── 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 │ ├── aws-bedrock-data-automation-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── aws_bedrock_data_automation_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── helpers.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_helpers.py │ │ │ ├── test_init.py │ │ │ ├── test_main.py │ │ │ └── test_server.py │ │ └── uv-requirements.txt │ ├── aws-dataprocessing-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── 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 │ │ │ │ │ ├── emr_serverless_application_handler.py │ │ │ │ │ └── emr_serverless_job_run_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 │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── 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_custom_tags_emr_serverless.py │ │ │ │ │ ├── test_emr_ec2_cluster_handler.py │ │ │ │ │ ├── test_emr_ec2_instance_handler.py │ │ │ │ │ ├── test_emr_ec2_steps_handler.py │ │ │ │ │ ├── test_emr_serverless_application_handler.py │ │ │ │ │ └── test_emr_serverless_job_run_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_data_catalog_models.py │ │ │ ├── test_init.py │ │ │ ├── test_server.py │ │ │ ├── test_utils.py │ │ │ └── utils/ │ │ │ ├── __init__.py │ │ │ ├── test_aws_helper.py │ │ │ ├── test_custom_tags.py │ │ │ ├── test_logging_helper.py │ │ │ └── test_sql_analyzer.py │ │ └── uv-requirements.txt │ ├── aws-diagram-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── DO_NOT_RELEASE │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── aws_diagram_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── _sandbox_runner.py │ │ │ ├── diagrams_tools.py │ │ │ ├── models.py │ │ │ ├── scanner.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── 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 │ ├── aws-documentation-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── aws_documentation_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── models.py │ │ │ ├── server.py │ │ │ ├── server_aws.py │ │ │ ├── server_aws_cn.py │ │ │ ├── server_utils.py │ │ │ └── util.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── 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_read_sections_live.py │ │ │ ├── test_aws_recommend_live.py │ │ │ ├── test_aws_search_live.py │ │ │ ├── test_integ_basic.py │ │ │ ├── test_metadata_handling.py │ │ │ ├── test_models.py │ │ │ ├── test_server.py │ │ │ ├── test_server_aws.py │ │ │ ├── test_server_aws_cn.py │ │ │ ├── test_server_utils.py │ │ │ └── test_util.py │ │ └── uv-requirements.txt │ ├── aws-healthomics-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── MCP_INSPECTOR_SETUP.md │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── aws_healthomics_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── analysis/ │ │ │ │ ├── __init__.py │ │ │ │ ├── cost_analyzer.py │ │ │ │ ├── instance_recommender.py │ │ │ │ ├── pricing_cache.py │ │ │ │ └── task_aggregator.py │ │ │ ├── consts.py │ │ │ ├── models/ │ │ │ │ ├── __init__.py │ │ │ │ ├── analysis.py │ │ │ │ ├── core.py │ │ │ │ ├── ecr.py │ │ │ │ ├── s3.py │ │ │ │ ├── search.py │ │ │ │ └── store.py │ │ │ ├── search/ │ │ │ │ ├── __init__.py │ │ │ │ ├── file_association_engine.py │ │ │ │ ├── file_type_detector.py │ │ │ │ ├── genomics_search_orchestrator.py │ │ │ │ ├── healthomics_search_engine.py │ │ │ │ ├── json_response_builder.py │ │ │ │ ├── pattern_matcher.py │ │ │ │ ├── result_ranker.py │ │ │ │ ├── s3_search_engine.py │ │ │ │ └── scoring_engine.py │ │ │ ├── server.py │ │ │ ├── tools/ │ │ │ │ ├── __init__.py │ │ │ │ ├── codeconnections.py │ │ │ │ ├── ecr_tools.py │ │ │ │ ├── genomics_file_search.py │ │ │ │ ├── helper_tools.py │ │ │ │ ├── reference_store_tools.py │ │ │ │ ├── run_analysis.py │ │ │ │ ├── run_cache.py │ │ │ │ ├── run_group.py │ │ │ │ ├── run_timeline.py │ │ │ │ ├── sequence_store_tools.py │ │ │ │ ├── troubleshooting.py │ │ │ │ ├── workflow_analysis.py │ │ │ │ ├── workflow_execution.py │ │ │ │ ├── workflow_linting.py │ │ │ │ └── workflow_management.py │ │ │ ├── utils/ │ │ │ │ ├── __init__.py │ │ │ │ ├── aws_utils.py │ │ │ │ ├── content_resolver.py │ │ │ │ ├── ecr_utils.py │ │ │ │ ├── error_utils.py │ │ │ │ ├── path_utils.py │ │ │ │ ├── s3_utils.py │ │ │ │ ├── search_config.py │ │ │ │ └── validation_utils.py │ │ │ └── visualization/ │ │ │ ├── __init__.py │ │ │ ├── gantt_generator.py │ │ │ └── svg_builder.py │ │ ├── docker-healthcheck.sh │ │ ├── docs/ │ │ │ └── workflow_linting.md │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── INTEGRATION_TESTS_README.md │ │ │ ├── QUICK_REFERENCE.md │ │ │ ├── TESTING_FRAMEWORK.md │ │ │ ├── conftest.py │ │ │ ├── fixtures/ │ │ │ │ └── genomics_test_data.py │ │ │ ├── test_adhoc_s3_buckets.py │ │ │ ├── test_analysis_models.py │ │ │ ├── test_aws_utils.py │ │ │ ├── test_clone_container.py │ │ │ ├── test_codeconnections.py │ │ │ ├── test_consts.py │ │ │ ├── test_content_resolver.py │ │ │ ├── test_content_resolver_security.py │ │ │ ├── test_cost_analyzer.py │ │ │ ├── test_create_container_registry_map.py │ │ │ ├── test_ecr_coverage.py │ │ │ ├── test_ecr_models.py │ │ │ ├── test_ecr_tools.py │ │ │ ├── test_ecr_utils.py │ │ │ ├── test_error_utils.py │ │ │ ├── test_file_association_engine.py │ │ │ ├── test_file_type_detector.py │ │ │ ├── test_gantt_generator.py │ │ │ ├── test_genomics_file_search_integration_working.py │ │ │ ├── test_genomics_search_orchestrator.py │ │ │ ├── test_healthomics_search_engine.py │ │ │ ├── test_helper_tools.py │ │ │ ├── test_helper_tools_resolution.py │ │ │ ├── test_helpers.py │ │ │ ├── test_init.py │ │ │ ├── test_instance_recommender.py │ │ │ ├── test_integration_framework.py │ │ │ ├── test_json_response_builder.py │ │ │ ├── test_main.py │ │ │ ├── test_models.py │ │ │ ├── test_package_workflow_output.py │ │ │ ├── test_pagination.py │ │ │ ├── test_pattern_matcher.py │ │ │ ├── test_performance_comparison.py │ │ │ ├── test_pricing_cache.py │ │ │ ├── test_pull_through_cache_initiation.py │ │ │ ├── test_reference_store_tools.py │ │ │ ├── test_result_ranker.py │ │ │ ├── test_run_analysis.py │ │ │ ├── test_run_cache.py │ │ │ ├── test_run_group.py │ │ │ ├── test_run_group_models.py │ │ │ ├── test_run_timeline.py │ │ │ ├── test_run_timeline_output.py │ │ │ ├── test_s3_file_model.py │ │ │ ├── test_s3_search_engine.py │ │ │ ├── test_s3_utils.py │ │ │ ├── test_scoring_engine.py │ │ │ ├── test_search_config.py │ │ │ ├── test_sequence_store_tools.py │ │ │ ├── test_server.py │ │ │ ├── test_store_models.py │ │ │ ├── test_store_properties.py │ │ │ ├── test_svg_builder.py │ │ │ ├── test_task_aggregator.py │ │ │ ├── test_troubleshooting.py │ │ │ ├── test_validation_utils.py │ │ │ ├── test_workflow_analysis.py │ │ │ ├── test_workflow_execution.py │ │ │ ├── test_workflow_execution_run_group.py │ │ │ ├── test_workflow_linting.py │ │ │ ├── test_workflow_linting_resolution.py │ │ │ ├── test_workflow_management.py │ │ │ ├── test_workflow_management_resolution.py │ │ │ └── test_workflow_tools.py │ │ └── uv-requirements.txt │ ├── aws-iac-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── aws_iac_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── client/ │ │ │ │ ├── aws_client.py │ │ │ │ ├── aws_knowledge_client.py │ │ │ │ └── mcp_proxy.py │ │ │ ├── config.py │ │ │ ├── data/ │ │ │ │ ├── cloudformation_failure_cases.py │ │ │ │ └── default_guard_rules.guard │ │ │ ├── knowledge_models.py │ │ │ ├── sanitizer.py │ │ │ ├── server.py │ │ │ └── tools/ │ │ │ ├── cdk_best_practices.py │ │ │ ├── cloudformation_compliance_checker.py │ │ │ ├── cloudformation_deployment_troubleshooter.py │ │ │ ├── cloudformation_pre_deploy_validation.py │ │ │ ├── cloudformation_validator.py │ │ │ └── iac_tools.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── client/ │ │ │ │ ├── test_aws_client.py │ │ │ │ ├── test_aws_knowledge_client.py │ │ │ │ └── test_mcp_proxy.py │ │ │ ├── proxy/ │ │ │ │ └── __init__.py │ │ │ ├── test_sanitizer.py │ │ │ ├── test_server.py │ │ │ └── tools/ │ │ │ ├── test_cdk_search_documentation_tool.py │ │ │ ├── test_cloudformation_compliance_checker.py │ │ │ ├── test_cloudformation_deployment_troubleshooter.py │ │ │ ├── test_cloudformation_failure_cases.py │ │ │ ├── test_cloudformation_pre_deploy_validation.py │ │ │ ├── test_cloudformation_validator.py │ │ │ ├── test_search_cdk_samples_and_constructs_tool.py │ │ │ └── test_search_cloudformation_documentation_tool.py │ │ └── uv-requirements.txt │ ├── aws-iot-sitewise-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── DEVELOPMENT.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── aws_iot_sitewise_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── client.py │ │ │ ├── models/ │ │ │ │ ├── computation_data_models.py │ │ │ │ └── metadata_transfer_data_models.py │ │ │ ├── prompts/ │ │ │ │ ├── __init__.py │ │ │ │ ├── anomaly_detection_workflow.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_computation_models.py │ │ │ │ ├── sitewise_data.py │ │ │ │ ├── sitewise_executions.py │ │ │ │ ├── sitewise_gateways.py │ │ │ │ ├── sitewise_metadata_transfer.py │ │ │ │ └── timestamp_tools.py │ │ │ ├── validation.py │ │ │ └── validation_utils.py │ │ ├── docker-healthcheck.sh │ │ ├── examples/ │ │ │ └── wind_farm_example.py │ │ ├── pyproject.toml │ │ ├── run_server.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── models/ │ │ │ │ ├── test_computation_data_models.py │ │ │ │ └── test_metadata_transfer_data_models.py │ │ │ ├── test_client.py │ │ │ ├── test_init.py │ │ │ ├── test_main.py │ │ │ ├── test_server.py │ │ │ ├── test_validation.py │ │ │ ├── test_validation_utils.py │ │ │ └── tools/ │ │ │ ├── test_sitewise_access.py │ │ │ ├── test_sitewise_asset_models.py │ │ │ ├── test_sitewise_assets.py │ │ │ ├── test_sitewise_computation_models.py │ │ │ ├── test_sitewise_data.py │ │ │ ├── test_sitewise_executions.py │ │ │ ├── test_sitewise_gateways.py │ │ │ ├── test_sitewise_metadata_transfer.py │ │ │ └── test_timestamp_tools.py │ │ └── uv-requirements.txt │ ├── aws-knowledge-mcp-server/ │ │ └── README.md │ ├── aws-location-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── aws_location_server/ │ │ │ ├── __init__.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_server.py │ │ │ └── test_server_integration.py │ │ └── uv-requirements.txt │ ├── aws-msk-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── 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_topics/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_topic.py │ │ │ │ ├── delete_topic.py │ │ │ │ └── update_topic.py │ │ │ ├── mutate_vpc/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_vpc_connection.py │ │ │ │ ├── delete_vpc_connection.py │ │ │ │ └── reject_client_vpc_connection.py │ │ │ ├── read_cluster/ │ │ │ │ ├── __init__.py │ │ │ │ ├── describe_cluster.py │ │ │ │ ├── describe_cluster_operation.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.py │ │ │ │ ├── describe_configuration_revision.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_topics/ │ │ │ │ ├── __init__.py │ │ │ │ ├── describe_topic.py │ │ │ │ ├── describe_topic_partitions.py │ │ │ │ └── list_topics.py │ │ │ ├── read_vpc/ │ │ │ │ ├── __init__.py │ │ │ │ └── describe_vpc_connection.py │ │ │ └── static_tools/ │ │ │ ├── __init__.py │ │ │ └── cluster_best_practices.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── 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_topic.py │ │ │ ├── test_create_vpc_connection.py │ │ │ ├── test_delete_topic.py │ │ │ ├── test_delete_vpc_connection.py │ │ │ ├── test_describe_cluster.py │ │ │ ├── test_describe_cluster_operation.py │ │ │ ├── test_describe_configuration.py │ │ │ ├── test_describe_configuration_revision.py │ │ │ ├── test_describe_topic.py │ │ │ ├── test_describe_topic_partitions.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_topics.py │ │ │ ├── test_list_vpc_connections.py │ │ │ ├── test_logs_and_telemetry.py │ │ │ ├── test_main.py │ │ │ ├── test_mutate_cluster.py │ │ │ ├── test_mutate_cluster_init.py │ │ │ ├── test_mutate_cluster_success_cases.py │ │ │ ├── test_mutate_config_init.py │ │ │ ├── test_mutate_topics_init.py │ │ │ ├── test_mutate_vpc_init.py │ │ │ ├── test_read_cluster_init.py │ │ │ ├── test_read_cluster_init_updated.py │ │ │ ├── test_read_config_init.py │ │ │ ├── test_read_global_init.py │ │ │ ├── test_read_topics_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 │ │ │ └── test_update_topic.py │ │ └── uv-requirements.txt │ ├── aws-network-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── aws_network_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── server.py │ │ │ ├── tools/ │ │ │ │ ├── __init__.py │ │ │ │ ├── cloud_wan/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── detect_cloudwan_inspection.py │ │ │ │ │ ├── get_all_cloudwan_routes.py │ │ │ │ │ ├── get_cloudwan_attachment_details.py │ │ │ │ │ ├── get_cloudwan_details.py │ │ │ │ │ ├── get_cloudwan_logs.py │ │ │ │ │ ├── get_cloudwan_peering_details.py │ │ │ │ │ ├── get_cloudwan_routes.py │ │ │ │ │ ├── list_cloudwan_peerings.py │ │ │ │ │ ├── list_core_networks.py │ │ │ │ │ └── simulate_cloud_wan_route_change.py │ │ │ │ ├── general/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── find_ip_address.py │ │ │ │ │ ├── get_eni_details.py │ │ │ │ │ └── get_path_trace_methodology.py │ │ │ │ ├── network_firewall/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── get_firewall_rules.py │ │ │ │ │ ├── get_network_firewall_flow_logs.py │ │ │ │ │ └── list_network_firewalls.py │ │ │ │ ├── transit_gateway/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── detect_transit_gateway_inspection.py │ │ │ │ │ ├── get_all_transit_gateway_routes.py │ │ │ │ │ ├── get_transit_gateway_details.py │ │ │ │ │ ├── get_transit_gateway_flow_logs.py │ │ │ │ │ ├── get_transit_gateway_routes.py │ │ │ │ │ ├── list_transit_gateway_peerings.py │ │ │ │ │ └── list_transit_gateways.py │ │ │ │ ├── vpc/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── get_vpc_flow_logs.py │ │ │ │ │ ├── get_vpc_network_details.py │ │ │ │ │ └── list_vpcs.py │ │ │ │ └── vpn/ │ │ │ │ ├── __init__.py │ │ │ │ └── list_vpn_connections.py │ │ │ └── utils/ │ │ │ ├── __init__.py │ │ │ ├── aws_common.py │ │ │ ├── formatters.py │ │ │ └── vcp_details.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_server.py │ │ │ ├── tools/ │ │ │ │ ├── __init__.py │ │ │ │ ├── cloud_wan/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── conftest.py │ │ │ │ │ ├── test_detect_cloudwan_inspection.py │ │ │ │ │ ├── test_get_all_cloudwan_routes.py │ │ │ │ │ ├── test_get_cloudwan_attachment_details.py │ │ │ │ │ ├── test_get_cloudwan_details.py │ │ │ │ │ ├── test_get_cloudwan_logs.py │ │ │ │ │ ├── test_get_cloudwan_peering_details.py │ │ │ │ │ ├── test_get_cloudwan_routes.py │ │ │ │ │ ├── test_list_core_networks.py │ │ │ │ │ └── test_simulate_cloud_wan_route_change.py │ │ │ │ ├── general/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_find_ip_address.py │ │ │ │ │ └── test_get_eni_details.py │ │ │ │ ├── network_firewall/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_get_firewall_rules.py │ │ │ │ │ ├── test_get_network_firewall_flow_logs.py │ │ │ │ │ └── test_list_network_firewalls.py │ │ │ │ ├── transit_gateway/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_detect_transit_gateway_inspection.py │ │ │ │ │ ├── test_get_all_transit_gateway_routes.py │ │ │ │ │ ├── test_get_tgw_details.py │ │ │ │ │ ├── test_get_transit_gateway_flow_logs.py │ │ │ │ │ ├── test_get_transit_gateway_routes.py │ │ │ │ │ ├── test_list_transit_gateway_peerings.py │ │ │ │ │ └── test_list_transit_gateways.py │ │ │ │ ├── vpc/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_get_vpc_flow_logs.py │ │ │ │ │ ├── test_get_vpc_network_details.py │ │ │ │ │ └── test_list_vpcs.py │ │ │ │ └── vpn/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_list_vpn_connections.py │ │ │ └── utils/ │ │ │ ├── __init__.py │ │ │ ├── test_aws_common.py │ │ │ ├── test_formatters.py │ │ │ └── test_vcp_details.py │ │ └── uv-requirements.txt │ ├── aws-pricing-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── aws_pricing_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── alternative_pricing.py │ │ │ ├── cdk_analyzer.py │ │ │ ├── consts.py │ │ │ ├── helpers.py │ │ │ ├── models.py │ │ │ ├── pricing_client.py │ │ │ ├── pricing_transformer.py │ │ │ ├── report_generator.py │ │ │ ├── server.py │ │ │ ├── static/ │ │ │ │ ├── COST_REPORT_TEMPLATE.md │ │ │ │ ├── __init__.py │ │ │ │ └── patterns/ │ │ │ │ ├── BEDROCK.md │ │ │ │ └── __init__.py │ │ │ └── terraform_analyzer.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_alternative_pricing.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 │ ├── aws-serverless-mcp-server/ │ │ ├── .pre-commit.config.yaml │ │ ├── .python-version │ │ ├── .secrets.baseline │ │ ├── README.md │ │ ├── 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/ │ │ │ │ ├── README.md │ │ │ │ ├── backend.j2 │ │ │ │ ├── frontend.j2 │ │ │ │ └── fullstack.j2 │ │ │ ├── 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 │ │ └── tests/ │ │ ├── README.md │ │ ├── __init__.py │ │ ├── conftest.py │ │ ├── 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 │ ├── aws-support-mcp-server/ │ │ ├── .python-version │ │ ├── README.md │ │ ├── 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 │ │ └── tests/ │ │ ├── __init__.py │ │ ├── conftests.py │ │ ├── test_aws_support_mcp_server.py │ │ └── test_models.py │ ├── bedrock-kb-retrieval-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── bedrock_kb_retrieval_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── knowledgebases/ │ │ │ │ ├── __init__.py │ │ │ │ ├── clients.py │ │ │ │ ├── discovery.py │ │ │ │ └── retrieval.py │ │ │ ├── models.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── run_tests.sh │ │ ├── tests/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_clients.py │ │ │ ├── test_discovery.py │ │ │ ├── test_env_config.py │ │ │ ├── test_models.py │ │ │ ├── test_retrieval.py │ │ │ └── test_server.py │ │ └── uv-requirements.txt │ ├── billing-cost-management-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── __init__.py │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── billing_cost_management_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── models.py │ │ │ ├── prompts/ │ │ │ │ ├── README.md │ │ │ │ ├── __init__.py │ │ │ │ ├── decorator.py │ │ │ │ ├── graviton_migration.py │ │ │ │ ├── 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 │ │ │ │ ├── billing_conductor_operations.py │ │ │ │ ├── billing_conductor_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 │ │ │ └── time_utils.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── prompts/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_prompts.py │ │ │ ├── test_models.py │ │ │ ├── test_server.py │ │ │ ├── tools/ │ │ │ │ ├── __init__.py │ │ │ │ ├── fixtures.py │ │ │ │ ├── test_aws_bcm_pricing_calculator_tools.py │ │ │ │ ├── test_aws_pricing_tools.py │ │ │ │ ├── test_billing_conductor_operations.py │ │ │ │ ├── test_billing_conductor_tools.py │ │ │ │ ├── test_budget_tools.py │ │ │ │ ├── test_compute_optimizer_tools.py │ │ │ │ ├── test_cost_anomaly_tools.py │ │ │ │ ├── test_cost_anomaly_tools_enhanced.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 │ │ │ └── test_time_utils.py │ │ └── uv-requirements.txt │ ├── ccapi-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── DO_NOT_RELEASE │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── 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 │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── 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 │ ├── cdk-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── 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/ │ │ │ ├── CDK_GENERAL_GUIDANCE.md │ │ │ ├── CDK_NAG_GUIDANCE.md │ │ │ ├── __init__.py │ │ │ └── lambda_powertools/ │ │ │ ├── bedrock.md │ │ │ ├── cdk.md │ │ │ ├── dependencies.md │ │ │ ├── index.md │ │ │ ├── insights.md │ │ │ ├── logging.md │ │ │ ├── metrics.md │ │ │ └── tracing.md │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── core/ │ │ │ │ ├── test_resources.py │ │ │ │ ├── test_resources_enhanced.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 │ ├── cfn-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── DO_NOT_RELEASE │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── 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 │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── 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 │ ├── cloudtrail-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── cloudtrail_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── common.py │ │ │ ├── models.py │ │ │ ├── server.py │ │ │ └── tools.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_init.py │ │ │ ├── test_main.py │ │ │ ├── test_models.py │ │ │ ├── test_server.py │ │ │ └── test_tools.py │ │ └── uv-requirements.txt │ ├── cloudwatch-applicationsignals-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── cloudwatch_applicationsignals_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── audit_presentation_utils.py │ │ │ ├── audit_utils.py │ │ │ ├── aws_clients.py │ │ │ ├── canary_utils.py │ │ │ ├── change_tools.py │ │ │ ├── enablement_guides/ │ │ │ │ └── templates/ │ │ │ │ ├── ec2/ │ │ │ │ │ ├── ec2-dotnet-enablement.md │ │ │ │ │ ├── ec2-java-enablement.md │ │ │ │ │ ├── ec2-nodejs-enablement.md │ │ │ │ │ └── ec2-python-enablement.md │ │ │ │ ├── ecs/ │ │ │ │ │ ├── ecs-dotnet-enablement.md │ │ │ │ │ ├── ecs-java-enablement.md │ │ │ │ │ ├── ecs-nodejs-enablement.md │ │ │ │ │ └── ecs-python-enablement.md │ │ │ │ ├── eks/ │ │ │ │ │ ├── eks-dotnet-enablement.md │ │ │ │ │ ├── eks-java-enablement.md │ │ │ │ │ ├── eks-nodejs-enablement.md │ │ │ │ │ └── eks-python-enablement.md │ │ │ │ └── lambda/ │ │ │ │ ├── lambda-dotnet-enablement.md │ │ │ │ ├── lambda-java-enablement.md │ │ │ │ ├── lambda-nodejs-enablement.md │ │ │ │ └── lambda-python-enablement.md │ │ │ ├── enablement_tools.py │ │ │ ├── group_tools.py │ │ │ ├── server.py │ │ │ ├── service_audit_utils.py │ │ │ ├── service_tools.py │ │ │ ├── sli_report_client.py │ │ │ ├── slo_tools.py │ │ │ ├── trace_tools.py │ │ │ └── utils.py │ │ ├── docker-healthcheck.sh │ │ ├── evals/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── __main__.py │ │ │ ├── core/ │ │ │ │ ├── __init__.py │ │ │ │ ├── captor.py │ │ │ │ ├── conversation_runner.py │ │ │ │ ├── eval_config.py │ │ │ │ ├── eval_mcp_server_wrapper.py │ │ │ │ ├── eval_runner.py │ │ │ │ ├── file_tools.py │ │ │ │ ├── llm_provider.py │ │ │ │ ├── mcp_client.py │ │ │ │ ├── mcp_dependency_mocking_handler.py │ │ │ │ ├── metrics_tracker.py │ │ │ │ ├── mock_config_path_normalizer.py │ │ │ │ ├── process_executor.py │ │ │ │ ├── task.py │ │ │ │ ├── task_result.py │ │ │ │ ├── validation_prompts.py │ │ │ │ └── validator.py │ │ │ ├── requirements.txt │ │ │ └── tasks/ │ │ │ ├── __init__.py │ │ │ └── applicationsignals/ │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── get_enablement_guide/ │ │ │ │ ├── __init__.py │ │ │ │ └── enablement_tasks.py │ │ │ └── investigations/ │ │ │ ├── __init__.py │ │ │ ├── fixtures/ │ │ │ │ ├── bug-4-list-audit-findings-all-services-all-auditors.json │ │ │ │ ├── bug-4-list-audit-findings-all-services-default-auditors.json │ │ │ │ ├── bug-4-list-audit-findings-document-service-and-all-auditors.json │ │ │ │ └── bug-4-list-services.json │ │ │ └── investigation_tasks.py │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── conftest.py │ │ │ ├── test_audit_presentation_utils.py │ │ │ ├── test_audit_services_filtering.py │ │ │ ├── test_audit_utils.py │ │ │ ├── test_aws_profile.py │ │ │ ├── test_batch_audit.py │ │ │ ├── test_canary_utils.py │ │ │ ├── test_change_tools.py │ │ │ ├── test_enablement_tools.py │ │ │ ├── test_group_tools.py │ │ │ ├── test_initialization.py │ │ │ ├── test_server.py │ │ │ ├── test_server_audit_functions.py │ │ │ ├── test_server_audit_tools.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 │ ├── cloudwatch-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── cloudwatch_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── aws_common.py │ │ │ ├── cloudwatch_alarms/ │ │ │ │ ├── models.py │ │ │ │ └── tools.py │ │ │ ├── cloudwatch_logs/ │ │ │ │ ├── models.py │ │ │ │ └── tools.py │ │ │ ├── cloudwatch_metrics/ │ │ │ │ ├── cloudformation_template_generator.py │ │ │ │ ├── constants.py │ │ │ │ ├── data/ │ │ │ │ │ └── metric_metadata.json │ │ │ │ ├── metric_analyzer.py │ │ │ │ ├── metric_data_decomposer.py │ │ │ │ ├── models.py │ │ │ │ └── tools.py │ │ │ ├── common.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── skills/ │ │ │ ├── README.md │ │ │ └── agentcore-investigation/ │ │ │ ├── SKILL.md │ │ │ ├── kiro-skill-setup.md │ │ │ ├── mcp/ │ │ │ │ ├── .mcp.json │ │ │ │ └── mcp-setup.md │ │ │ └── references/ │ │ │ └── otel-span-schema.md │ │ ├── tests/ │ │ │ ├── cloudwatch_alarms/ │ │ │ │ ├── test_active_alarms.py │ │ │ │ ├── test_alarm_history.py │ │ │ │ ├── test_alarm_history_integration.py │ │ │ │ └── test_alarms_error_handling.py │ │ │ ├── cloudwatch_logs/ │ │ │ │ ├── test_logs_error_handling.py │ │ │ │ ├── test_logs_models.py │ │ │ │ └── test_logs_server.py │ │ │ ├── cloudwatch_metrics/ │ │ │ │ ├── test_analyze_metric.py │ │ │ │ ├── test_cloudformation_template_generator.py │ │ │ │ ├── test_decomposer_trend.py │ │ │ │ ├── test_metric_analyzer.py │ │ │ │ ├── test_metrics_error_handling.py │ │ │ │ ├── test_metrics_models.py │ │ │ │ ├── test_metrics_server.py │ │ │ │ ├── test_seasonal_detector.py │ │ │ │ ├── test_seasonality_enum.py │ │ │ │ ├── test_utils.py │ │ │ │ └── test_validation_error.py │ │ │ ├── test_aws_common.py │ │ │ ├── test_common_and_server.py │ │ │ ├── test_init.py │ │ │ └── test_main.py │ │ └── uv-requirements.txt │ ├── code-doc-gen-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── code_doc_gen_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── server.py │ │ │ └── utils/ │ │ │ ├── doc_generator.py │ │ │ ├── models.py │ │ │ ├── repomix_manager.py │ │ │ └── templates.py │ │ ├── pyproject.toml │ │ └── tests/ │ │ ├── test_doc_generator.py │ │ ├── test_doc_generator_edge_cases.py │ │ ├── test_init.py │ │ ├── test_main.py │ │ ├── test_repomix_manager.py │ │ ├── test_repomix_manager_scenarios.py │ │ ├── test_repomix_statistics.py │ │ ├── test_server.py │ │ ├── test_server_extended.py │ │ └── test_templates.py │ ├── core-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── core_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── server.py │ │ │ └── static/ │ │ │ ├── PROMPT_UNDERSTANDING.md │ │ │ └── __init__.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_init.py │ │ │ ├── test_main.py │ │ │ ├── test_response_types.py │ │ │ ├── test_server.py │ │ │ └── test_static.py │ │ └── uv-requirements.txt │ ├── cost-explorer-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── DO_NOT_RELEASE │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── 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 │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── 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 │ ├── document-loader-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ ├── document_loader_mcp_server/ │ │ │ │ ├── __init__.py │ │ │ │ └── server.py │ │ │ └── py.typed │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── test_document_parsing.py │ │ │ └── test_server.py │ │ └── uv-requirements.txt │ ├── documentdb-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── 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 │ │ ├── pyproject.toml │ │ └── 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 │ ├── dynamodb-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── AGENTS.md │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── dynamodb_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── cdk_generator/ │ │ │ │ ├── __init__.py │ │ │ │ ├── generator.py │ │ │ │ ├── models.py │ │ │ │ └── templates/ │ │ │ │ ├── README.md │ │ │ │ └── stack.ts.j2 │ │ │ ├── common.py │ │ │ ├── cost_performance_calculator/ │ │ │ │ ├── __init__.py │ │ │ │ ├── calculator_runner.py │ │ │ │ ├── cost_calculator.py │ │ │ │ ├── cost_model.py │ │ │ │ ├── data_model.py │ │ │ │ └── report_generator.py │ │ │ ├── db_analyzer/ │ │ │ │ ├── __init__.py │ │ │ │ ├── analyzer_utils.py │ │ │ │ ├── base_plugin.py │ │ │ │ ├── mysql.py │ │ │ │ ├── plugin_registry.py │ │ │ │ ├── postgresql.py │ │ │ │ └── sqlserver.py │ │ │ ├── markdown_formatter.py │ │ │ ├── model_validation_utils.py │ │ │ ├── prompts/ │ │ │ │ ├── dal_implementation/ │ │ │ │ │ ├── generate_dal_workflow_steps.md │ │ │ │ │ └── python.md │ │ │ │ ├── dynamodb_architect.md │ │ │ │ ├── dynamodb_schema_generator.md │ │ │ │ ├── json_generation_guide.md │ │ │ │ ├── next_steps/ │ │ │ │ │ ├── dynamodb_data_model_schema_converter_complete.md │ │ │ │ │ ├── dynamodb_data_model_validation_complete.md │ │ │ │ │ ├── dynamodb_data_modeling_complete.md │ │ │ │ │ ├── generate_data_access_layer_complete.md │ │ │ │ │ ├── generate_data_access_layer_schema_not_found.md │ │ │ │ │ └── generate_resources_complete.md │ │ │ │ ├── transform_model_validation_result.md │ │ │ │ └── usage_data_generator.md │ │ │ ├── repo_generation_tool/ │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── __init__.py │ │ │ │ ├── codegen.py │ │ │ │ ├── core/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── cross_table_validator.py │ │ │ │ │ ├── file_utils.py │ │ │ │ │ ├── filter_expression_validator.py │ │ │ │ │ ├── gsi_validator.py │ │ │ │ │ ├── key_template_parser.py │ │ │ │ │ ├── language_config.py │ │ │ │ │ ├── language_sample_generator.py │ │ │ │ │ ├── language_type_mapper.py │ │ │ │ │ ├── range_query_validator.py │ │ │ │ │ ├── schema_definitions.py │ │ │ │ │ ├── schema_loader.py │ │ │ │ │ ├── schema_validator.py │ │ │ │ │ ├── type_mappings.py │ │ │ │ │ ├── usage_data_formatter.py │ │ │ │ │ ├── usage_data_loader.py │ │ │ │ │ ├── usage_data_validator.py │ │ │ │ │ ├── utils.py │ │ │ │ │ └── validation_utils.py │ │ │ │ ├── docs/ │ │ │ │ │ ├── ADDING_NEW_LANGUAGES.md │ │ │ │ │ ├── ADVANCED_USAGE.md │ │ │ │ │ ├── FILTER_EXPRESSIONS.md │ │ │ │ │ ├── GSI_SUPPORT.md │ │ │ │ │ ├── LANGUAGE_CONFIGURATION.md │ │ │ │ │ ├── RANGE_QUERIES.md │ │ │ │ │ ├── SCHEMA_VALIDATION.md │ │ │ │ │ ├── TESTING.md │ │ │ │ │ ├── TRANSACTIONS.md │ │ │ │ │ └── USAGE_DATA.md │ │ │ │ ├── generators/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── access_pattern_mapper.py │ │ │ │ │ ├── base_generator.py │ │ │ │ │ ├── jinja2_generator.py │ │ │ │ │ └── sample_generators.py │ │ │ │ ├── languages/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── python/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── base_repository.py │ │ │ │ │ ├── language_config.json │ │ │ │ │ ├── ruff.toml │ │ │ │ │ ├── sample_generators.py │ │ │ │ │ ├── templates/ │ │ │ │ │ │ ├── entities_header.j2 │ │ │ │ │ │ ├── entity_template.j2 │ │ │ │ │ │ ├── repositories_header.j2 │ │ │ │ │ │ ├── repository_template.j2 │ │ │ │ │ │ ├── transaction_service_template.j2 │ │ │ │ │ │ └── usage_examples_template.j2 │ │ │ │ │ ├── type_mappings.py │ │ │ │ │ └── usage_data_formatter.py │ │ │ │ └── output/ │ │ │ │ ├── __init__.py │ │ │ │ └── output_manager.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── cdk_generator/ │ │ │ │ ├── __init__.py │ │ │ │ ├── integration/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── conftest.py │ │ │ │ │ ├── test_cdk_compilation.py │ │ │ │ │ ├── test_cdk_deployment.py │ │ │ │ │ └── test_cdk_generation.py │ │ │ │ ├── test_generator.py │ │ │ │ └── test_models.py │ │ │ ├── conftest.py │ │ │ ├── cost_performance_calculator/ │ │ │ │ ├── __init__.py │ │ │ │ ├── conftest.py │ │ │ │ ├── test_calculator_runner.py │ │ │ │ ├── test_cost_calculator.py │ │ │ │ ├── test_data_model.py │ │ │ │ ├── test_data_model_batch_get_item.py │ │ │ │ ├── test_data_model_batch_write_item.py │ │ │ │ ├── test_data_model_delete_item.py │ │ │ │ ├── test_data_model_get_item.py │ │ │ │ ├── test_data_model_gsi.py │ │ │ │ ├── test_data_model_put_item.py │ │ │ │ ├── test_data_model_query.py │ │ │ │ ├── test_data_model_scan.py │ │ │ │ ├── test_data_model_table.py │ │ │ │ ├── test_data_model_transact_get_items.py │ │ │ │ ├── test_data_model_transact_write_items.py │ │ │ │ ├── test_data_model_update_item.py │ │ │ │ ├── test_integration.py │ │ │ │ └── test_report_generator.py │ │ │ ├── db_analyzer/ │ │ │ │ ├── __init__.py │ │ │ │ ├── conftest.py │ │ │ │ ├── test_analyzer_utils.py │ │ │ │ ├── test_mysql_managed_mode.py │ │ │ │ └── test_plugins.py │ │ │ ├── evals/ │ │ │ │ ├── README.md │ │ │ │ ├── dynamic_evaluators.py │ │ │ │ ├── evaluation_registry.py │ │ │ │ ├── logging_config.py │ │ │ │ ├── multiturn_evaluator.py │ │ │ │ ├── scenarios.py │ │ │ │ └── test_dspy_evals.py │ │ │ ├── repo_generation_tool/ │ │ │ │ ├── __init__.py │ │ │ │ ├── conftest.py │ │ │ │ ├── fixtures/ │ │ │ │ │ ├── expected_outputs/ │ │ │ │ │ │ └── python/ │ │ │ │ │ │ ├── deals/ │ │ │ │ │ │ │ ├── access_pattern_mapping.json │ │ │ │ │ │ │ ├── base_repository.py │ │ │ │ │ │ │ ├── entities.py │ │ │ │ │ │ │ ├── repositories.py │ │ │ │ │ │ │ ├── ruff.toml │ │ │ │ │ │ │ └── usage_examples.py │ │ │ │ │ │ ├── ecommerce/ │ │ │ │ │ │ │ ├── access_pattern_mapping.json │ │ │ │ │ │ │ ├── base_repository.py │ │ │ │ │ │ │ ├── entities.py │ │ │ │ │ │ │ ├── repositories.py │ │ │ │ │ │ │ ├── ruff.toml │ │ │ │ │ │ │ └── usage_examples.py │ │ │ │ │ │ ├── elearning/ │ │ │ │ │ │ │ ├── access_pattern_mapping.json │ │ │ │ │ │ │ ├── base_repository.py │ │ │ │ │ │ │ ├── entities.py │ │ │ │ │ │ │ ├── repositories.py │ │ │ │ │ │ │ ├── ruff.toml │ │ │ │ │ │ │ └── usage_examples.py │ │ │ │ │ │ ├── food_delivery/ │ │ │ │ │ │ │ ├── access_pattern_mapping.json │ │ │ │ │ │ │ ├── base_repository.py │ │ │ │ │ │ │ ├── entities.py │ │ │ │ │ │ │ ├── repositories.py │ │ │ │ │ │ │ ├── ruff.toml │ │ │ │ │ │ │ └── usage_examples.py │ │ │ │ │ │ ├── gaming_leaderboard/ │ │ │ │ │ │ │ ├── access_pattern_mapping.json │ │ │ │ │ │ │ ├── base_repository.py │ │ │ │ │ │ │ ├── entities.py │ │ │ │ │ │ │ ├── repositories.py │ │ │ │ │ │ │ ├── ruff.toml │ │ │ │ │ │ │ └── usage_examples.py │ │ │ │ │ │ ├── package_delivery/ │ │ │ │ │ │ │ ├── access_pattern_mapping.json │ │ │ │ │ │ │ ├── base_repository.py │ │ │ │ │ │ │ ├── entities.py │ │ │ │ │ │ │ ├── repositories.py │ │ │ │ │ │ │ ├── ruff.toml │ │ │ │ │ │ │ └── usage_examples.py │ │ │ │ │ │ ├── saas/ │ │ │ │ │ │ │ ├── access_pattern_mapping.json │ │ │ │ │ │ │ ├── base_repository.py │ │ │ │ │ │ │ ├── entities.py │ │ │ │ │ │ │ ├── repositories.py │ │ │ │ │ │ │ ├── ruff.toml │ │ │ │ │ │ │ └── usage_examples.py │ │ │ │ │ │ ├── social_media/ │ │ │ │ │ │ │ ├── access_pattern_mapping.json │ │ │ │ │ │ │ ├── base_repository.py │ │ │ │ │ │ │ ├── entities.py │ │ │ │ │ │ │ ├── repositories.py │ │ │ │ │ │ │ ├── ruff.toml │ │ │ │ │ │ │ └── usage_examples.py │ │ │ │ │ │ ├── user_analytics/ │ │ │ │ │ │ │ ├── access_pattern_mapping.json │ │ │ │ │ │ │ ├── base_repository.py │ │ │ │ │ │ │ ├── entities.py │ │ │ │ │ │ │ ├── repositories.py │ │ │ │ │ │ │ ├── ruff.toml │ │ │ │ │ │ │ └── usage_examples.py │ │ │ │ │ │ └── user_registration/ │ │ │ │ │ │ ├── access_pattern_mapping.json │ │ │ │ │ │ ├── base_repository.py │ │ │ │ │ │ ├── entities.py │ │ │ │ │ │ ├── repositories.py │ │ │ │ │ │ ├── ruff.toml │ │ │ │ │ │ ├── transaction_service.py │ │ │ │ │ │ └── usage_examples.py │ │ │ │ │ ├── invalid_schemas/ │ │ │ │ │ │ ├── comprehensive_invalid_schema.json │ │ │ │ │ │ ├── invalid_cross_table_patterns.json │ │ │ │ │ │ ├── invalid_filter_expression_schema.json │ │ │ │ │ │ ├── invalid_gsi_schema.json │ │ │ │ │ │ ├── invalid_gsi_schema_errors.md │ │ │ │ │ │ ├── invalid_multi_attribute_keys_schema.json │ │ │ │ │ │ ├── test_cross_table_entity_ref.json │ │ │ │ │ │ ├── test_cross_table_refs.json │ │ │ │ │ │ ├── test_duplicate_entity_names.json │ │ │ │ │ │ ├── test_entity_ref_schema.json │ │ │ │ │ │ └── test_multi_table_schema.json │ │ │ │ │ ├── invalid_usage_data/ │ │ │ │ │ │ ├── empty_sample_data.json │ │ │ │ │ │ ├── invalid_field_names.json │ │ │ │ │ │ ├── invalid_json_structure.json │ │ │ │ │ │ ├── malformed_json.json.txt │ │ │ │ │ │ ├── missing_entities.json │ │ │ │ │ │ ├── missing_required_sections.json │ │ │ │ │ │ ├── unknown_entities.json │ │ │ │ │ │ └── unknown_top_level_keys.json │ │ │ │ │ ├── valid_schemas/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── deals_app/ │ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ │ └── deals_schema.json │ │ │ │ │ │ ├── ecommerce_app/ │ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ │ └── ecommerce_schema.json │ │ │ │ │ │ ├── elearning_platform/ │ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ │ └── elearning_schema.json │ │ │ │ │ │ ├── food_delivery_app/ │ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ │ └── food_delivery_schema.json │ │ │ │ │ │ ├── gaming_leaderboard/ │ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ │ └── gaming_leaderboard_schema.json │ │ │ │ │ │ ├── package_delivery_app/ │ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ │ └── package_delivery_app_schema.json │ │ │ │ │ │ ├── saas_app/ │ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ │ └── project_management_schema.json │ │ │ │ │ │ ├── social_media_app/ │ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ │ └── social_media_app_schema.json │ │ │ │ │ │ ├── user_analytics/ │ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ │ └── user_analytics_schema.json │ │ │ │ │ │ └── user_registration/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ └── user_registration_schema.json │ │ │ │ │ └── valid_usage_data/ │ │ │ │ │ ├── deals_app/ │ │ │ │ │ │ └── deals_usage_data.json │ │ │ │ │ ├── ecommerce_app/ │ │ │ │ │ │ └── ecommerce_usage_data.json │ │ │ │ │ ├── elearning_platform/ │ │ │ │ │ │ └── elearning_usage_data.json │ │ │ │ │ ├── food_delivery_app/ │ │ │ │ │ │ └── food_delivery_usage_data.json │ │ │ │ │ ├── gaming_leaderboard/ │ │ │ │ │ │ └── gaming_leaderboard_usage_data.json │ │ │ │ │ ├── package_delivery_app/ │ │ │ │ │ │ └── package_delivery_app_usage_data.json │ │ │ │ │ ├── saas_app/ │ │ │ │ │ │ └── project_management_usage_data.json │ │ │ │ │ ├── social_media_app/ │ │ │ │ │ │ └── social_media_app_usage_data.json │ │ │ │ │ ├── user_analytics/ │ │ │ │ │ │ └── user_analytics_usage_data.json │ │ │ │ │ └── user_registration/ │ │ │ │ │ └── user_registration_usage_data.json │ │ │ │ ├── integration/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_cli_integration.py │ │ │ │ │ ├── test_consistent_read_integration.py │ │ │ │ │ ├── test_filter_expression_generation.py │ │ │ │ │ ├── test_gsi_pipeline_integration.py │ │ │ │ │ ├── test_python_code_generation_pipeline.py │ │ │ │ │ ├── test_python_snapshot_generation.py │ │ │ │ │ ├── test_sparse_gsi_integration.py │ │ │ │ │ └── test_transaction_service_generation.py │ │ │ │ ├── scripts/ │ │ │ │ │ └── manage_snapshots.py │ │ │ │ └── unit/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_access_pattern_mapper.py │ │ │ │ ├── test_codegen.py │ │ │ │ ├── test_cross_table_validation.py │ │ │ │ ├── test_file_utils.py │ │ │ │ ├── test_filter_expression_codegen.py │ │ │ │ ├── test_filter_expression_validator.py │ │ │ │ ├── test_gsi_projections.py │ │ │ │ ├── test_gsi_validator.py │ │ │ │ ├── test_jinja2_generator.py │ │ │ │ ├── test_key_template_parser.py │ │ │ │ ├── test_language_config.py │ │ │ │ ├── test_language_type_mapper.py │ │ │ │ ├── test_output_manager.py │ │ │ │ ├── test_range_query_validator.py │ │ │ │ ├── test_sample_generators.py │ │ │ │ ├── test_schema_definitions.py │ │ │ │ ├── test_schema_loader.py │ │ │ │ ├── test_schema_validator.py │ │ │ │ ├── test_sparse_gsi.py │ │ │ │ ├── test_type_mappings.py │ │ │ │ ├── test_usage_data_loader.py │ │ │ │ ├── test_usage_data_validator.py │ │ │ │ ├── test_utils.py │ │ │ │ └── test_validation_utils.py │ │ │ ├── test_common.py │ │ │ ├── test_dynamodb_server.py │ │ │ ├── test_markdown_formatter.py │ │ │ └── test_model_validation_utils.py │ │ └── uv-requirements.txt │ ├── ecs-mcp-server/ │ │ ├── .python-version │ │ ├── DEVELOPMENT.md │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── ecs_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── api/ │ │ │ │ ├── __init__.py │ │ │ │ ├── containerize.py │ │ │ │ ├── delete.py │ │ │ │ ├── ecs_troubleshooting.py │ │ │ │ ├── express.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 │ │ │ │ ├── express.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 │ │ ├── pyproject.toml │ │ ├── pyrightconfig.json │ │ ├── server.json │ │ └── 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 │ │ │ └── utils/ │ │ │ └── mcp_call_tool.py │ │ ├── llm_testing/ │ │ │ ├── README.md │ │ │ ├── SCRIPT_IMPROVEMENTS.md │ │ │ ├── invalid_cfn_template.yaml │ │ │ ├── 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 │ │ │ └── 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_express.py │ │ ├── test_image_pull_failure.py │ │ ├── test_image_pull_failure_extended.py │ │ ├── test_infrastructure.py │ │ ├── test_infrastructure_role.py │ │ ├── test_integration.py │ │ ├── test_main.py │ │ ├── test_resource_management.py │ │ ├── test_resource_management_api_operation.py │ │ ├── test_resource_management_tool.py │ │ ├── test_security_integration.py │ │ ├── test_status.py │ │ ├── test_status_pytest.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_aws_utils_express.py │ │ ├── test_config.py │ │ ├── test_docker.py │ │ ├── test_response_sanitization.py │ │ ├── test_security.py │ │ ├── test_security_extended.py │ │ ├── test_templates.py │ │ └── test_time_utils.py │ ├── eks-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── 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 │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── 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 │ ├── elasticache-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── 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 │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── test_connection.py │ │ │ ├── test_decorators.py │ │ │ ├── test_init.py │ │ │ ├── test_main.py │ │ │ └── tools/ │ │ │ ├── cc/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_connect.py │ │ │ │ ├── test_connect_additional.py │ │ │ │ ├── test_connect_coverage.py │ │ │ │ ├── test_connect_coverage_additional.py │ │ │ │ ├── test_create.py │ │ │ │ ├── test_create_additional.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.py │ │ │ │ ├── test_connect_additional.py │ │ │ │ ├── test_connect_coverage_additional.py │ │ │ │ ├── test_connect_optional_fields.py │ │ │ │ ├── test_connect_partial_coverage.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.py │ │ │ ├── test_connect_additional.py │ │ │ ├── test_connect_coverage_additional.py │ │ │ ├── test_connect_optional_fields.py │ │ │ ├── test_create.py │ │ │ ├── test_delete.py │ │ │ ├── test_describe.py │ │ │ └── test_modify.py │ │ └── uv-requirements.txt │ ├── finch-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── 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 │ │ ├── pyproject.toml │ │ └── 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 │ ├── frontend-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── frontend_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── server.py │ │ │ ├── static/ │ │ │ │ └── react/ │ │ │ │ ├── essential-knowledge.md │ │ │ │ └── troubleshooting.md │ │ │ └── utils/ │ │ │ ├── __init__.py │ │ │ └── file_utils.py │ │ ├── pyproject.toml │ │ └── tests/ │ │ ├── test_file_utils.py │ │ ├── test_init.py │ │ ├── test_main.py │ │ └── test_server.py │ ├── git-repo-research-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── 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 │ │ ├── pyproject.toml │ │ ├── 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 │ ├── healthimaging-mcp-server/ │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── healthimaging_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── healthimaging_operations.py │ │ │ ├── main.py │ │ │ ├── models.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── conftest.py │ │ │ ├── test_main.py │ │ │ ├── test_models.py │ │ │ ├── test_operations.py │ │ │ ├── test_server.py │ │ │ └── test_validation_edge_cases.py │ │ └── uv-requirements.txt │ ├── healthlake-mcp-server/ │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── CONTRIBUTING.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── healthlake_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── fhir_operations.py │ │ │ ├── main.py │ │ │ ├── models.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── examples/ │ │ │ ├── README.md │ │ │ └── mcp_config.json │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── conftest.py │ │ │ ├── test_fhir_client_comprehensive.py │ │ │ ├── test_fhir_error_scenarios.py │ │ │ ├── test_fhir_operations.py │ │ │ ├── test_integration_mock_based.py │ │ │ ├── test_main.py │ │ │ ├── test_main_edge_cases.py │ │ │ ├── test_mcp_integration_coverage.py │ │ │ ├── test_models.py │ │ │ ├── test_models_edge_cases.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 │ ├── iam-mcp-server/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── DESIGN_COMPLIANCE.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── iam_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── aws_client.py │ │ │ ├── context.py │ │ │ ├── errors.py │ │ │ ├── models.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── examples/ │ │ │ ├── get_policy_document_example.py │ │ │ └── inline_policy_demo.py │ │ ├── pyproject.toml │ │ ├── run_tests.sh │ │ ├── tests/ │ │ │ ├── test_context.py │ │ │ ├── test_errors.py │ │ │ ├── test_inline_policies.py │ │ │ └── test_server.py │ │ └── uv-requirements.txt │ ├── lambda-tool-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── lambda_tool_mcp_server/ │ │ │ ├── __init__.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── examples/ │ │ │ ├── README.md │ │ │ └── sample_functions/ │ │ │ ├── customer-create/ │ │ │ │ └── app.py │ │ │ ├── customer-id-from-email/ │ │ │ │ └── app.py │ │ │ ├── customer-info-from-id/ │ │ │ │ └── app.py │ │ │ └── template.yml │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_format_lambda_response.py │ │ │ ├── test_integration.py │ │ │ ├── test_integration_coverage.py │ │ │ ├── test_register_lambda_functions.py │ │ │ ├── test_schema_integration.py │ │ │ ├── test_server.py │ │ │ ├── test_server_coverage.py │ │ │ └── test_server_coverage_additional.py │ │ └── uv-requirements.txt │ ├── mcp-lambda-handler/ │ │ ├── .gitignore │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ └── mcp_lambda_handler/ │ │ │ ├── __init__.py │ │ │ ├── mcp_lambda_handler.py │ │ │ ├── session.py │ │ │ └── types.py │ │ ├── pyproject.toml │ │ └── tests/ │ │ └── test_lambda_handler.py │ ├── memcached-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── ELASTICACHECONNECT.md │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── memcached_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── common/ │ │ │ │ ├── config.py │ │ │ │ ├── connection.py │ │ │ │ └── server.py │ │ │ ├── context.py │ │ │ ├── main.py │ │ │ └── tools/ │ │ │ └── cache.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── test_cache.py │ │ │ ├── test_cache_readonly.py │ │ │ ├── test_connection.py │ │ │ ├── test_init.py │ │ │ └── test_main.py │ │ └── uv-requirements.txt │ ├── mysql-mcp-server/ │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── mysql_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── connection/ │ │ │ │ ├── __init__.py │ │ │ │ ├── abstract_db_connection.py │ │ │ │ ├── asyncmy_pool_connection.py │ │ │ │ ├── db_connection_singleton.py │ │ │ │ └── rds_data_api_connection.py │ │ │ ├── constants.py │ │ │ ├── mutable_sql_detector.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── conftest.py │ │ │ ├── test_abstract_db_connection.py │ │ │ ├── test_asyncmy_pool_connection.py │ │ │ ├── test_db_connection_singleton.py │ │ │ ├── test_rds_data_api_connection.py │ │ │ └── test_server.py │ │ └── uv-requirements.txt │ ├── nova-canvas-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── nova_canvas_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── consts.py │ │ │ ├── models.py │ │ │ ├── novacanvas.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_models.py │ │ │ ├── test_novacanvas.py │ │ │ └── test_server.py │ │ └── uv-requirements.txt │ ├── openapi-mcp-server/ │ │ ├── .coveragerc │ │ ├── .dockerignore │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── AUTHENTICATION.md │ │ ├── AWS_BEST_PRACTICES.md │ │ ├── CHANGELOG.md │ │ ├── DEPLOYMENT.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── OBSERVABILITY.md │ │ ├── README.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.py │ │ │ └── openapi_validator.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── pyrightconfig.json │ │ └── tests/ │ │ ├── README.md │ │ ├── api/ │ │ │ └── test_config.py │ │ ├── auth/ │ │ │ ├── test_api_key_auth.py │ │ │ ├── test_auth_cache.py │ │ │ ├── test_auth_errors.py │ │ │ ├── test_auth_factory.py │ │ │ ├── test_auth_factory_caching.py │ │ │ ├── test_auth_factory_coverage.py │ │ │ ├── test_auth_protocol.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_provider_additional.py │ │ │ ├── test_base_auth.py │ │ │ ├── test_base_auth_coverage.py │ │ │ ├── test_basic_auth.py │ │ │ ├── test_bearer_auth.py │ │ │ ├── test_cognito_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_register.py │ │ │ └── test_register_coverage.py │ │ ├── prompts/ │ │ │ ├── standalone/ │ │ │ │ ├── test_operation_prompt.py │ │ │ │ ├── test_prompt_arguments.py │ │ │ │ └── test_secure_operation_prompt.py │ │ │ ├── test_mcp_prompt_manager.py │ │ │ ├── test_mcp_prompt_manager_integration.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 │ │ ├── test_api_name.py │ │ ├── test_cache_coverage_89.py │ │ ├── test_client.py │ │ ├── test_coverage_boost.py │ │ ├── test_init.py │ │ ├── test_main.py │ │ ├── test_main_extended.py │ │ ├── test_openapi_coverage_89.py │ │ ├── test_server.py │ │ ├── test_server_auth_errors.py │ │ ├── test_server_coverage_boost.py │ │ ├── test_server_coverage_boost_2.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 │ │ └── utils/ │ │ ├── test_cache_provider.py │ │ ├── test_error_handler.py │ │ ├── test_error_handler_boost.py │ │ ├── test_error_handler_extended.py │ │ ├── test_error_handler_fix.py │ │ ├── test_http_client.py │ │ ├── test_http_client_comprehensive.py │ │ ├── test_http_client_extended.py │ │ ├── test_http_client_extended2.py │ │ ├── test_http_client_import_error.py │ │ ├── test_metrics_provider.py │ │ ├── test_metrics_provider_decorators.py │ │ ├── test_metrics_provider_extended2.py │ │ ├── test_metrics_provider_prometheus.py │ │ ├── test_openapi.py │ │ └── test_openapi_validator.py │ ├── postgres-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── postgres_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── connection/ │ │ │ │ ├── __init__.py │ │ │ │ ├── abstract_db_connection.py │ │ │ │ ├── cp_api_connection.py │ │ │ │ ├── db_connection_map.py │ │ │ │ ├── psycopg_pool_connection.py │ │ │ │ └── rds_api_connection.py │ │ │ ├── mutable_sql_detector.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── kiro_power/ │ │ │ ├── POWER.md │ │ │ ├── mcp.json │ │ │ └── steering/ │ │ │ ├── aurora-postgres-mcp.md │ │ │ └── aurora-postgres.md │ │ ├── kiro_proj_steering/ │ │ │ └── tech.md │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── conftest.py │ │ │ ├── e2e_test_sql_injection.py │ │ │ ├── test_abstract_db_connection.py │ │ │ ├── test_cp_api_connection.py │ │ │ ├── test_cp_api_iam_policy.py │ │ │ ├── test_cp_api_simple_functions.py │ │ │ ├── test_db_connection_map.py │ │ │ ├── test_psycopg_connector.py │ │ │ ├── test_rds_api_connection.py │ │ │ ├── test_server.py │ │ │ ├── test_server_error_handling.py │ │ │ ├── test_server_helpers.py │ │ │ └── test_server_internal_functions.py │ │ └── uv-requirements.txt │ ├── prometheus-mcp-server/ │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── prometheus_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── consts.py │ │ │ ├── models.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── 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 │ ├── redshift-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── redshift_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── consts.py │ │ │ ├── models.py │ │ │ ├── redshift.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── test_init.py │ │ │ ├── test_main.py │ │ │ ├── test_redshift.py │ │ │ └── test_server.py │ │ └── uv-requirements.txt │ ├── s3-tables-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── CONTEXT.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── 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 │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── 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 │ ├── sagemaker-ai-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── sagemaker_ai_mcp_server/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── aws_helper.py │ │ │ ├── consts.py │ │ │ ├── logging_helper.py │ │ │ ├── sagemaker_hyperpod/ │ │ │ │ ├── __init__.py │ │ │ │ ├── hyperpod_cluster_node_handler.py │ │ │ │ ├── hyperpod_stack_handler.py │ │ │ │ └── models.py │ │ │ └── server.py │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_aws_helper.py │ │ │ ├── test_hyperpod_cluster_node_handler.py │ │ │ ├── test_hyperpod_stack_handler.py │ │ │ ├── test_init.py │ │ │ ├── test_logging_helper.py │ │ │ ├── test_main.py │ │ │ ├── test_models.py │ │ │ └── test_server.py │ │ └── uv-requirements.txt │ ├── sagemaker-unified-studio-spark-troubleshooting-mcp-server/ │ │ └── README.md │ ├── sagemaker-unified-studio-spark-upgrade-mcp-server/ │ │ └── README.md │ ├── stepfunctions-tool-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── stepfunctions_tool_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── aws_helper.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── 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 │ ├── syntheticdata-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── syntheticdata_mcp_server/ │ │ │ ├── __init__.py │ │ │ ├── pandas_interpreter.py │ │ │ ├── server.py │ │ │ └── storage/ │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── loader.py │ │ │ └── s3.py │ │ ├── pyproject.toml │ │ └── 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 │ ├── terraform-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── DO_NOT_RELEASE │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── 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/ │ │ │ ├── AWSCC_PROVIDER_RESOURCES.md │ │ │ ├── AWS_PROVIDER_RESOURCES.md │ │ │ ├── AWS_TERRAFORM_BEST_PRACTICES.md │ │ │ ├── MCP_INSTRUCTIONS.md │ │ │ ├── TERRAFORM_WORKFLOW_GUIDE.md │ │ │ └── __init__.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── 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.py │ │ │ └── test_utils_additional.py │ │ └── uv-requirements.txt │ ├── timestream-for-influxdb-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── awslabs/ │ │ │ ├── __init__.py │ │ │ └── timestream_for_influxdb_mcp_server/ │ │ │ ├── __init__.py │ │ │ └── server.py │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── test_init.py │ │ │ ├── test_main.py │ │ │ └── test_server.py │ │ └── uv-requirements.txt │ ├── valkey-mcp-server/ │ │ ├── .gitignore │ │ ├── .python-version │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── ELASTICACHECONNECT.md │ │ ├── LICENSE │ │ ├── NOTICE │ │ ├── README.md │ │ ├── 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 │ │ ├── docker-healthcheck.sh │ │ ├── pyproject.toml │ │ ├── tests/ │ │ │ ├── test_bitmap.py │ │ │ ├── test_config.py │ │ │ ├── test_connection.py │ │ │ ├── test_hash.py │ │ │ ├── test_hyperloglog.py │ │ │ ├── test_init.py │ │ │ ├── test_json.py │ │ │ ├── test_json_additional.py │ │ │ ├── test_json_readonly.py │ │ │ ├── test_list.py │ │ │ ├── test_list_additional.py │ │ │ ├── test_list_readonly.py │ │ │ ├── test_main.py │ │ │ ├── test_misc.py │ │ │ ├── test_server_management.py │ │ │ ├── test_set.py │ │ │ ├── test_set_readonly.py │ │ │ ├── test_sorted_set.py │ │ │ ├── test_sorted_set_additional.py │ │ │ ├── test_sorted_set_readonly.py │ │ │ ├── test_stream.py │ │ │ ├── test_stream_additional.py │ │ │ ├── test_stream_readonly.py │ │ │ └── test_string.py │ │ └── uv-requirements.txt │ └── well-architected-security-mcp-server/ │ ├── .python-version │ ├── PROMPT_TEMPLATE.md │ ├── README.md │ ├── 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 │ ├── pyproject.toml │ └── tests/ │ ├── README.md │ ├── __init__.py │ ├── conftest.py │ ├── test_access_analyzer_fix.py │ ├── test_network_security.py │ ├── test_network_security_additional.py │ ├── test_prompt_utils.py │ ├── test_prompt_utils_coverage.py │ ├── test_resource_utils.py │ ├── test_resource_utils_fix.py │ ├── test_security_services.py │ ├── test_security_services_additional.py │ ├── test_security_services_coverage.py │ ├── test_server.py │ ├── test_server_additional.py │ ├── test_server_coverage.py │ ├── test_server_prompts.py │ ├── test_server_security_findings.py │ ├── test_storage_security.py │ ├── test_storage_security_additional.py │ ├── test_storage_security_comprehensive.py │ ├── test_storage_security_edge_cases.py │ ├── test_storage_security_recommendations.py │ └── test_user_agent_config.py ├── testing/ │ ├── README.md │ ├── __init__.py │ ├── mcp_test_client.py │ ├── mcp_test_runner.py │ ├── pytest_utils.py │ └── types.py └── trivy.yaml
Showing preview only (2,846K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (25967 symbols across 1903 files)
FILE: .github/workflows/release.py
function validate_path_security (line 48) | def validate_path_security(path: Path, allowed_base: Path = None) -> Path:
function validate_package_name (line 82) | def validate_package_name(name: str) -> str:
function validate_version_format (line 117) | def validate_version_format(version: str) -> bool:
function secure_file_read (line 150) | def secure_file_read(file_path: Path, encoding: str = 'utf-8') -> str:
function secure_file_write (line 177) | def secure_file_write(file_path: Path, content: str, encoding: str = 'ut...
class Package (line 204) | class Package(Protocol):
method package_name (line 209) | def package_name(self) -> str:
method package_version (line 213) | def package_version(self) -> str:
method bump_version (line 217) | def bump_version(self) -> str:
class NpmPackage (line 223) | class NpmPackage:
method __post_init__ (line 228) | def __post_init__(self):
method package_name (line 232) | def package_name(self) -> str:
method package_version (line 246) | def package_version(self) -> str:
method bump_version (line 262) | def bump_version(self) -> str:
class PyPiPackage (line 301) | class PyPiPackage:
method __post_init__ (line 306) | def __post_init__(self):
method package_name (line 310) | def package_name(self) -> str:
method package_version (line 328) | def package_version(self) -> str:
method bump_version (line 348) | def bump_version(self) -> str:
function cli (line 417) | def cli():
function bump_package (line 424) | def bump_package(directory: Path) -> int:
FILE: docusaurus/src/components/ServerCards/index.tsx
type ServerCardProps (line 6) | type ServerCardProps = {
type CategoryProps (line 18) | type CategoryProps = {
type WorkflowProps (line 25) | type WorkflowProps = {
function ServerCards (line 115) | function ServerCards(): React.ReactNode {
FILE: docusaurus/src/pages/servers.tsx
function Servers (line 5) | function Servers(): React.ReactNode {
FILE: samples/mcp-integration-with-kb/clients/client_server.py
function global_exception_handler (line 62) | async def global_exception_handler(request: Request, exc: Exception):
class QueryRequest (line 70) | class QueryRequest(BaseModel):
class QueryResponse (line 77) | class QueryResponse(BaseModel):
class KnowledgeBaseRequest (line 83) | class KnowledgeBaseRequest(BaseModel):
class KnowledgeBaseResponse (line 89) | class KnowledgeBaseResponse(BaseModel):
function process_query (line 97) | async def process_query(query: str, kb_id: str) -> Dict[str, Any]:
function query (line 235) | async def query(request: QueryRequest):
function health_check (line 249) | def health_check():
function add_knowledge_base (line 255) | def add_knowledge_base(request: KnowledgeBaseRequest):
function list_knowledge_bases (line 265) | def list_knowledge_bases():
FILE: samples/mcp-integration-with-kb/user_interfaces/chat_bedrock_st.py
function query_api (line 88) | def query_api(prompt, kb_id):
FILE: samples/mcp-integration-with-nova-canvas/clients/client_server.py
function global_exception_handler (line 57) | async def global_exception_handler(request: Request, exc: Exception):
class ImageGenerationRequest (line 65) | class ImageGenerationRequest(BaseModel):
class ImageGenerationResponse (line 94) | class ImageGenerationResponse(BaseModel):
function improve_prompt_with_nova_text (line 104) | async def improve_prompt_with_nova_text(prompt: str) -> str:
function generate_image (line 178) | async def generate_image(request: ImageGenerationRequest) -> Dict[str, A...
function generate (line 329) | async def generate(request: ImageGenerationRequest):
function health_check (line 343) | def health_check():
FILE: samples/mcp-integration-with-nova-canvas/user_interfaces/image_generator_st.py
function add_color (line 48) | def add_color(color: str):
function remove_color (line 54) | def remove_color(index: int):
function clear_colors (line 60) | def clear_colors():
function generate_image (line 65) | def generate_image(
FILE: samples/stepfunctions-tool-mcp-server/sample_state_machines/customer-create/app.py
function lambda_handler (line 14) | def lambda_handler(event: dict, context: dict) -> dict:
FILE: samples/stepfunctions-tool-mcp-server/sample_state_machines/customer-id-from-email/app.py
function lambda_handler (line 16) | def lambda_handler(event: dict, context: dict) -> dict:
FILE: samples/stepfunctions-tool-mcp-server/sample_state_machines/customer-info-from-id/app.py
function lambda_handler (line 16) | def lambda_handler(event: dict, context: dict) -> dict:
FILE: scripts/verify_awslabs_init.py
function main (line 58) | def main(directory: str) -> int:
FILE: scripts/verify_package_name.py
function extract_package_name (line 45) | def extract_package_name(pyproject_path: Path) -> str:
function extract_dependencies (line 61) | def extract_dependencies(pyproject_path: Path) -> List[str]:
function extract_package_from_base64_config (line 82) | def extract_package_from_base64_config(config_b64: str) -> List[str]:
function find_package_references_in_readme (line 133) | def find_package_references_in_readme(
function verify_package_name_consistency (line 230) | def verify_package_name_consistency(
function main (line 251) | def main():
FILE: scripts/verify_tool_names.py
function extract_package_name (line 64) | def extract_package_name(pyproject_path: Path) -> str:
function convert_package_name_to_server_format (line 79) | def convert_package_name_to_server_format(package_name: str) -> str:
function calculate_fully_qualified_name (line 94) | def calculate_fully_qualified_name(server_name: str, tool_name: str) -> ...
function find_tool_decorators (line 106) | def find_tool_decorators(file_path: Path) -> List[Tuple[str, int]]:
function find_all_tools_in_package (line 196) | def find_all_tools_in_package(package_dir: Path) -> List[Tuple[str, Path...
function validate_tool_name (line 221) | def validate_tool_name(tool_name: str) -> Tuple[List[str], List[str]]:
function validate_tool_names (line 269) | def validate_tool_names(
function main (line 301) | def main():
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/config.py
class Config (line 20) | class Config(BaseModel):
method validate_urls (line 39) | def validate_urls(cls, v: List[str]) -> List[str]:
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/server.py
function _is_service_enabled (line 61) | def _is_service_enabled(name: str) -> bool:
function server_lifespan (line 93) | async def server_lifespan(server: FastMCP) -> AsyncIterator[None]:
function main (line 149) | def main() -> None:
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/__init__.py
function cleanup_stale_sessions (line 34) | async def cleanup_stale_sessions(
function register_browser_tools (line 57) | def register_browser_tools(mcp):
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/browser_client.py
function get_browser_client (line 27) | def get_browser_client(
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/connection_manager.py
class BrowserConnectionManager (line 26) | class BrowserConnectionManager:
method __init__ (line 34) | def __init__(self):
method _ensure_playwright (line 42) | async def _ensure_playwright(self) -> Playwright:
method connect (line 49) | async def connect(
method get_browser (line 89) | def get_browser(self, session_id: str) -> Browser:
method get_context (line 108) | def get_context(self, session_id: str):
method get_page (line 126) | async def get_page(self, session_id: str) -> Page:
method set_active_page (line 155) | def set_active_page(self, session_id: str, page: Page) -> None:
method is_connected (line 166) | def is_connected(self, session_id: str) -> bool:
method get_session_ids (line 170) | def get_session_ids(self) -> list[str]:
method set_dialog_handler (line 174) | async def set_dialog_handler(
method remove_dialog_handler (line 208) | async def remove_dialog_handler(self, session_id: str) -> None:
method disconnect (line 220) | async def disconnect(self, session_id: str) -> None:
method cleanup (line 236) | async def cleanup(self) -> None:
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/error_handler.py
function error_with_snapshot (line 30) | async def error_with_snapshot(
function safe_capture (line 54) | async def safe_capture(
function ref_not_found_msg (line 73) | def ref_not_found_msg(ref: str) -> str:
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/interaction.py
function _wait_for_settled (line 41) | async def _wait_for_settled(page: Page, timeout_ms: int = INTERACTION_TI...
class InteractionTools (line 54) | class InteractionTools:
method __init__ (line 57) | def __init__(
method register (line 66) | def register(self, mcp):
method browser_click (line 78) | async def browser_click(
method browser_type (line 131) | async def browser_type(
method browser_fill_form (line 194) | async def browser_fill_form(
method browser_select_option (line 257) | async def browser_select_option(
method browser_hover (line 318) | async def browser_hover(
method browser_press_key (line 357) | async def browser_press_key(
method browser_upload_file (line 398) | async def browser_upload_file(
method browser_handle_dialog (line 443) | async def browser_handle_dialog(
method browser_mouse_wheel (line 487) | async def browser_mouse_wheel(
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/management.py
class ManagementTools (line 36) | class ManagementTools:
method __init__ (line 39) | def __init__(
method register (line 48) | def register(self, mcp):
method browser_tabs (line 54) | async def browser_tabs(
method browser_close (line 170) | async def browser_close(
method browser_resize (line 220) | async def browser_resize(
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/models.py
class BrowserSessionResponse (line 20) | class BrowserSessionResponse(BaseModel):
class BrowserSessionSummary (line 42) | class BrowserSessionSummary(BaseModel):
class SessionListResponse (line 50) | class SessionListResponse(BaseModel):
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/navigation.py
function _validate_url_scheme (line 40) | def _validate_url_scheme(url: str) -> str | None:
class NavigationTools (line 57) | class NavigationTools:
method __init__ (line 60) | def __init__(
method register (line 69) | def register(self, mcp):
method browser_navigate (line 75) | async def browser_navigate(
method browser_navigate_back (line 123) | async def browser_navigate_back(
method browser_navigate_forward (line 137) | async def browser_navigate_forward(
method _navigate_history (line 151) | async def _navigate_history(self, session_id: str, direction: str) -> ...
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/observation.py
class ObservationTools (line 39) | class ObservationTools:
method __init__ (line 42) | def __init__(
method register (line 51) | def register(self, mcp):
method browser_snapshot (line 63) | async def browser_snapshot(
method browser_take_screenshot (line 108) | async def browser_take_screenshot(
method browser_wait_for (line 146) | async def browser_wait_for(
method browser_console_messages (line 196) | async def browser_console_messages(
method browser_network_requests (line 244) | async def browser_network_requests(
method browser_evaluate (line 294) | async def browser_evaluate(
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/session.py
function _to_str (line 49) | def _to_str(value) -> str:
class BrowserSessionTools (line 56) | class BrowserSessionTools:
method __init__ (line 59) | def __init__(
method register (line 68) | def register(self, mcp):
method start_browser_session (line 75) | async def start_browser_session(
method get_browser_session (line 227) | async def get_browser_session(
method stop_browser_session (line 280) | async def stop_browser_session(
method list_browser_sessions (line 331) | async def list_browser_sessions(
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/snapshot_manager.py
class RefNotFoundError (line 28) | class RefNotFoundError(Exception):
class SnapshotManager (line 65) | class SnapshotManager:
method __init__ (line 76) | def __init__(self):
method capture (line 83) | async def capture(self, page: Page, session_id: str, *, selector: str ...
method _resolve_selector (line 190) | async def _resolve_selector(self, cdp, selector: str) -> int | None:
method _fetch_ax_nodes (line 223) | async def _fetch_ax_nodes(self, cdp, selector: str | None) -> list[dic...
method _fetch_full_ax_nodes (line 278) | async def _fetch_full_ax_nodes(self, cdp) -> list[dict]:
method _format_cdp_node (line 286) | def _format_cdp_node(
method resolve_ref (line 399) | async def resolve_ref(self, page: Page, ref: str, session_id: str) -> ...
method ref_count (line 441) | def ref_count(self, session_id: str) -> int:
method previous_snapshot (line 445) | def previous_snapshot(self, session_id: str) -> str | None:
method cleanup_session (line 449) | def cleanup_session(self, session_id: str) -> None:
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/docs.py
function search_agentcore_docs (line 21) | def search_agentcore_docs(query: str, k: int = 5) -> List[Dict[str, Any]]:
function fetch_agentcore_doc (line 97) | def fetch_agentcore_doc(uri: str) -> Dict[str, Any]:
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/gateway.py
function manage_agentcore_gateway (line 23) | def manage_agentcore_gateway() -> Dict[str, Any]:
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/memory.py
function manage_agentcore_memory (line 23) | def manage_agentcore_memory() -> Dict[str, Any]:
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/runtime.py
function manage_agentcore_runtime (line 23) | def manage_agentcore_runtime() -> Dict[str, Any]:
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/utils/cache.py
function load_links_only (line 30) | def load_links_only() -> None:
function ensure_ready (line 67) | def ensure_ready() -> None:
function ensure_page (line 77) | def ensure_page(url: str) -> doc_fetcher.Page | None:
function get_index (line 100) | def get_index() -> indexer.IndexSearch | None:
function get_url_cache (line 109) | def get_url_cache() -> Dict[str, doc_fetcher.Page | None]:
function get_url_titles (line 118) | def get_url_titles() -> Dict[str, str]:
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/utils/doc_fetcher.py
class Page (line 32) | class Page(BaseModel):
function _get (line 46) | def _get(url: str) -> str:
function parse_llms_txt (line 63) | def parse_llms_txt(url: str) -> list[tuple[str, str]]:
function _html_to_text (line 91) | def _html_to_text(raw_html: str) -> str:
function _extract_html_title (line 109) | def _extract_html_title(raw_html: str) -> str | None:
function fetch_and_clean (line 132) | def fetch_and_clean(page_url: str) -> Page:
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/utils/indexer.py
class Doc (line 30) | class Doc(BaseModel):
class IndexSearch (line 55) | class IndexSearch:
method __init__ (line 74) | def __init__(self) -> None:
method add (line 80) | def add(self, doc: Doc) -> None:
method search (line 130) | def search(self, query: str, k: int = 8) -> list[tuple[float, Doc]]:
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/utils/text_processor.py
function normalize (line 23) | def normalize(s: str) -> str:
function title_from_url (line 35) | def title_from_url(url: str) -> str:
function format_display_title (line 58) | def format_display_title(url: str, extracted: str | None, url_titles: di...
function index_title_variants (line 90) | def index_title_variants(display_title: str, url: str) -> str:
function normalize_for_comparison (line 121) | def normalize_for_comparison(string: str) -> str:
function make_snippet (line 138) | def make_snippet(page: Page | None, display_title: str, max_chars: int =...
FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/utils/url_validator.py
class URLValidationError (line 20) | class URLValidationError(Exception):
class URLValidator (line 26) | class URLValidator:
method __init__ (line 29) | def __init__(self, allowed_domain_prefixes: List[str]):
method is_url_allowed (line 37) | def is_url_allowed(self, url: str) -> bool:
method validate_urls (line 56) | def validate_urls(self, urls) -> List[str]:
function validate_urls (line 100) | def validate_urls(urls, allowed_domains: list[str] | None = None) -> lis...
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/conftest.py
function mock_ctx (line 22) | def mock_ctx():
function mock_browser_client (line 31) | def mock_browser_client(monkeypatch):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_integ_browser_session.py
function _make_ctx (line 139) | def _make_ctx():
function _setup_page (line 147) | async def _setup_page(connection_manager, session_id, html):
function _find_ref (line 169) | def _find_ref(snapshot_text, role, name):
function nav_env (line 195) | async def nav_env():
function form_env (line 229) | async def form_env():
function mgmt_env (line 264) | async def mgmt_env():
class TestSessionLifecycle (line 305) | class TestSessionLifecycle:
method test_start_session (line 316) | async def test_start_session(self):
method test_start_session_custom_viewport (line 336) | async def test_start_session_custom_viewport(self):
method test_get_session (line 365) | async def test_get_session(self):
method test_list_sessions (line 379) | async def test_list_sessions(self):
method test_stop_session (line 390) | async def test_stop_session(self):
class TestNavigationAndObservation (line 410) | class TestNavigationAndObservation:
method test_navigate (line 415) | async def test_navigate(self, nav_env):
method test_snapshot (line 435) | async def test_snapshot(self, nav_env):
method test_screenshot (line 447) | async def test_screenshot(self, nav_env):
method test_screenshot_full_page (line 461) | async def test_screenshot_full_page(self, nav_env):
method test_evaluate (line 472) | async def test_evaluate(self, nav_env):
method test_evaluate_object (line 483) | async def test_evaluate_object(self, nav_env):
method test_evaluate_null (line 494) | async def test_evaluate_null(self, nav_env):
method test_console_messages (line 504) | async def test_console_messages(self, nav_env):
method test_network_requests (line 513) | async def test_network_requests(self, nav_env):
method test_wait_for_text (line 522) | async def test_wait_for_text(self, nav_env):
method test_wait_for_selector (line 534) | async def test_wait_for_selector(self, nav_env):
method test_wait_for_timeout (line 545) | async def test_wait_for_timeout(self, nav_env):
method test_wait_for_no_criteria (line 556) | async def test_wait_for_no_criteria(self, nav_env):
method test_navigate_back (line 565) | async def test_navigate_back(self, nav_env):
method test_navigate_forward (line 584) | async def test_navigate_forward(self, nav_env):
method test_snapshot_with_selector (line 593) | async def test_snapshot_with_selector(self, nav_env):
method test_snapshot_with_invalid_selector (line 608) | async def test_snapshot_with_invalid_selector(self, nav_env):
class TestInteractionAndForms (line 629) | class TestInteractionAndForms:
method test_click (line 632) | async def test_click(self, form_env):
method test_click_double (line 645) | async def test_click_double(self, form_env):
method test_type_text (line 663) | async def test_type_text(self, form_env):
method test_type_with_submit (line 682) | async def test_type_with_submit(self, form_env):
method test_type_without_clear (line 701) | async def test_type_without_clear(self, form_env):
method test_fill_form (line 720) | async def test_fill_form(self, form_env):
method test_fill_form_with_submit (line 741) | async def test_fill_form_with_submit(self, form_env):
method test_select_option_by_label (line 765) | async def test_select_option_by_label(self, form_env):
method test_select_option_by_value (line 783) | async def test_select_option_by_value(self, form_env):
method test_select_option_by_index (line 801) | async def test_select_option_by_index(self, form_env):
method test_select_option_no_criteria (line 819) | async def test_select_option_no_criteria(self, form_env):
method test_hover (line 835) | async def test_hover(self, form_env):
method test_press_key (line 852) | async def test_press_key(self, form_env):
method test_press_key_combo (line 865) | async def test_press_key_combo(self, form_env):
method test_mouse_wheel_down (line 878) | async def test_mouse_wheel_down(self, form_env):
method test_mouse_wheel_up (line 891) | async def test_mouse_wheel_up(self, form_env):
method test_upload_file (line 904) | async def test_upload_file(self, form_env):
method test_handle_dialog_accept (line 925) | async def test_handle_dialog_accept(self, form_env):
method test_handle_dialog_dismiss (line 947) | async def test_handle_dialog_dismiss(self, form_env):
method test_handle_dialog_with_prompt (line 971) | async def test_handle_dialog_with_prompt(self, form_env):
class TestManagement (line 1009) | class TestManagement:
method test_tabs_list (line 1012) | async def test_tabs_list(self, mgmt_env):
method test_tabs_new (line 1023) | async def test_tabs_new(self, mgmt_env):
method test_tabs_new_blank (line 1031) | async def test_tabs_new_blank(self, mgmt_env):
method test_tabs_select (line 1043) | async def test_tabs_select(self, mgmt_env):
method test_tabs_close (line 1056) | async def test_tabs_close(self, mgmt_env):
method test_tabs_unknown_action (line 1070) | async def test_tabs_unknown_action(self, mgmt_env):
method test_resize (line 1078) | async def test_resize(self, mgmt_env):
method test_close_page (line 1091) | async def test_close_page(self, mgmt_env):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_integ_mcp_protocol.py
function _build_server (line 85) | def _build_server(*, disable: str | None = None, enable: str | None = No...
class TestToolDiscovery (line 145) | class TestToolDiscovery:
method test_list_tools_default_config (line 148) | async def test_list_tools_default_config(self):
method test_list_tools_browser_disabled (line 157) | async def test_list_tools_browser_disabled(self):
method test_list_tools_browser_and_docs_only (line 167) | async def test_list_tools_browser_and_docs_only(self):
method test_list_tools_only_docs (line 182) | async def test_list_tools_only_docs(self):
class TestToolSchemas (line 197) | class TestToolSchemas:
method test_all_tools_have_descriptions (line 200) | async def test_all_tools_have_descriptions(self):
method test_browser_tools_require_session_id (line 212) | async def test_browser_tools_require_session_id(self):
method test_start_browser_session_has_optional_params (line 239) | async def test_start_browser_session_has_optional_params(self):
class TestToolInvocation (line 258) | class TestToolInvocation:
method test_browser_snapshot_invalid_session (line 261) | async def test_browser_snapshot_invalid_session(self):
method test_browser_navigate_invalid_session (line 274) | async def test_browser_navigate_invalid_session(self):
method test_browser_click_invalid_session (line 287) | async def test_browser_click_invalid_session(self):
method test_browser_resize_validation (line 300) | async def test_browser_resize_validation(self):
method test_start_session_mocked_api (line 313) | async def test_start_session_mocked_api(self):
method test_list_sessions_mocked_api (line 346) | async def test_list_sessions_mocked_api(self):
method test_docs_tool_invocation (line 367) | async def test_docs_tool_invocation(self):
method test_calling_nonexistent_tool_raises (line 375) | async def test_calling_nonexistent_tool_raises(self):
class TestServerCapabilities (line 391) | class TestServerCapabilities:
method test_server_has_tools_capability (line 394) | async def test_server_has_tools_capability(self):
method test_ping (line 403) | async def test_ping(self):
class TestGracefulDegradation (line 415) | class TestGracefulDegradation:
method test_server_works_without_browser_import (line 418) | async def test_server_works_without_browser_import(self):
method test_browser_evaluate_disabled_env (line 437) | async def test_browser_evaluate_disabled_env(self):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_unit_browser_client.py
class TestGetBrowserClient (line 30) | class TestGetBrowserClient:
method setup_method (line 33) | def setup_method(self):
method test_creates_client_with_defaults (line 39) | def test_creates_client_with_defaults(self, mock_browser_client_cls):
method test_creates_client_with_env_region (line 53) | def test_creates_client_with_env_region(self, mock_browser_client_cls):
method test_creates_client_with_explicit_region (line 66) | def test_creates_client_with_explicit_region(self, mock_browser_client...
method test_caches_client (line 79) | def test_caches_client(self, mock_browser_client_cls):
method test_different_regions_different_clients (line 91) | def test_different_regions_different_clients(self, mock_browser_client...
method test_integration_source_tagging (line 102) | def test_integration_source_tagging(self, mock_browser_client_cls):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_unit_connection.py
function connection_manager (line 35) | def connection_manager():
function mock_browser (line 41) | def mock_browser():
function mock_playwright (line 53) | def mock_playwright():
function mock_sdk_client (line 63) | def mock_sdk_client():
class TestConnect (line 70) | class TestConnect:
method test_connect_starts_playwright (line 75) | async def test_connect_starts_playwright(
method test_connect_passes_region (line 103) | async def test_connect_passes_region(
method test_connect_reuses_playwright (line 123) | async def test_connect_reuses_playwright(
class TestGetPage (line 145) | class TestGetPage:
method test_get_page_returns_last_page (line 148) | async def test_get_page_returns_last_page(self, connection_manager, mo...
method test_get_page_returns_active_page (line 156) | async def test_get_page_returns_active_page(self, connection_manager, ...
method test_get_page_falls_back_when_active_page_closed (line 166) | async def test_get_page_falls_back_when_active_page_closed(self, conne...
method test_get_context_returns_first_context (line 182) | async def test_get_context_returns_first_context(self, connection_mana...
method test_get_page_no_connection (line 190) | async def test_get_page_no_connection(self, connection_manager):
method test_get_page_no_contexts (line 195) | async def test_get_page_no_contexts(self, connection_manager):
method test_get_browser_no_connection (line 204) | async def test_get_browser_no_connection(self, connection_manager):
method test_get_context_no_connection (line 209) | async def test_get_context_no_connection(self, connection_manager):
method test_get_context_no_contexts (line 214) | async def test_get_context_no_contexts(self, connection_manager):
class TestDisconnect (line 224) | class TestDisconnect:
method test_disconnect_closes_browser (line 227) | async def test_disconnect_closes_browser(self, connection_manager, moc...
method test_disconnect_nonexistent_session (line 236) | async def test_disconnect_nonexistent_session(self, connection_manager):
method test_disconnect_handles_close_error (line 240) | async def test_disconnect_handles_close_error(self, connection_manager...
method test_disconnect_clears_active_page (line 248) | async def test_disconnect_clears_active_page(self, connection_manager,...
class TestCleanup (line 258) | class TestCleanup:
method test_cleanup_disconnects_all (line 263) | async def test_cleanup_disconnects_all(
method test_cleanup_handles_disconnect_error (line 285) | async def test_cleanup_handles_disconnect_error(self, connection_manag...
method test_cleanup_handles_playwright_stop_error (line 297) | async def test_cleanup_handles_playwright_stop_error(
class TestGenerateWsHeadersError (line 309) | class TestGenerateWsHeadersError:
method test_connect_no_credentials (line 314) | async def test_connect_no_credentials(
class TestDialogHandler (line 327) | class TestDialogHandler:
method test_set_dialog_handler (line 330) | async def test_set_dialog_handler(self, connection_manager, mock_brows...
method test_remove_dialog_handler (line 343) | async def test_remove_dialog_handler(self, connection_manager, mock_br...
method test_disconnect_removes_dialog_handler (line 356) | async def test_disconnect_removes_dialog_handler(self, connection_mana...
method test_dialog_handler_accept_execution (line 369) | async def test_dialog_handler_accept_execution(self, connection_manage...
method test_dialog_handler_dismiss_execution (line 390) | async def test_dialog_handler_dismiss_execution(self, connection_manag...
method test_dialog_handler_accept_no_prompt_text (line 411) | async def test_dialog_handler_accept_no_prompt_text(self, connection_m...
method test_remove_dialog_handler_no_handler (line 430) | async def test_remove_dialog_handler_no_handler(self, connection_manag...
method test_remove_dialog_handler_session_disconnected (line 434) | async def test_remove_dialog_handler_session_disconnected(
class TestReconnect (line 454) | class TestReconnect:
method test_connect_reconnect_disconnects_first (line 459) | async def test_connect_reconnect_disconnects_first(
class TestGetSessionIds (line 480) | class TestGetSessionIds:
method test_get_session_ids (line 483) | async def test_get_session_ids(self, connection_manager, mock_browser):
method test_get_session_ids_empty (line 491) | async def test_get_session_ids_empty(self, connection_manager):
class TestCleanupEdgeCases (line 496) | class TestCleanupEdgeCases:
method test_cleanup_no_playwright (line 499) | async def test_cleanup_no_playwright(self, connection_manager):
method test_cleanup_disconnect_raises (line 505) | async def test_cleanup_disconnect_raises(self, connection_manager):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_unit_error_handler.py
class TestErrorWithSnapshot (line 25) | class TestErrorWithSnapshot:
method test_error_with_snapshot_includes_snapshot (line 28) | async def test_error_with_snapshot_includes_snapshot(self):
method test_error_with_snapshot_no_page (line 40) | async def test_error_with_snapshot_no_page(self):
method test_error_with_snapshot_capture_fails (line 50) | async def test_error_with_snapshot_capture_fails(self):
class TestSafeCapture (line 61) | class TestSafeCapture:
method test_safe_capture_returns_snapshot (line 64) | async def test_safe_capture_returns_snapshot(self):
method test_safe_capture_no_page (line 75) | async def test_safe_capture_no_page(self):
method test_safe_capture_capture_fails (line 85) | async def test_safe_capture_capture_fails(self):
class TestRefNotFoundMsg (line 97) | class TestRefNotFoundMsg:
method test_ref_not_found_msg (line 100) | def test_ref_not_found_msg(self):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_unit_interaction.py
function mock_connection_manager (line 36) | def mock_connection_manager():
function mock_snapshot_manager (line 45) | def mock_snapshot_manager():
function mock_page (line 54) | def mock_page():
function mock_locator (line 77) | def mock_locator():
class TestNavigationTools (line 91) | class TestNavigationTools:
method nav_tools (line 95) | def nav_tools(self, mock_connection_manager, mock_snapshot_manager):
method test_navigate_to_url (line 99) | async def test_navigate_to_url(
method test_navigate_back (line 122) | async def test_navigate_back(
method test_navigate_forward (line 134) | async def test_navigate_forward(
method test_navigate_error (line 146) | async def test_navigate_error(
method test_navigate_back_error (line 161) | async def test_navigate_back_error(
method test_validate_url_scheme_parse_error (line 174) | def test_validate_url_scheme_parse_error(self):
method test_validate_url_scheme_empty_string (line 189) | def test_validate_url_scheme_empty_string(self):
method test_navigate_invalid_scheme (line 199) | async def test_navigate_invalid_scheme(
method test_validate_url_scheme_blocks_dangerous_schemes (line 222) | def test_validate_url_scheme_blocks_dangerous_schemes(self, dangerous_...
class TestInteractionTools (line 233) | class TestInteractionTools:
method interaction_tools (line 237) | def interaction_tools(self, mock_connection_manager, mock_snapshot_man...
method test_click_element (line 241) | async def test_click_element(
method test_double_click (line 260) | async def test_double_click(
method test_click_ref_not_found (line 280) | async def test_click_ref_not_found(
method test_type_text (line 300) | async def test_type_text(
method test_type_without_clear (line 321) | async def test_type_without_clear(
method test_type_with_submit (line 341) | async def test_type_with_submit(
method test_fill_form (line 361) | async def test_fill_form(
method test_fill_form_with_submit (line 386) | async def test_fill_form_with_submit(
method test_select_option_by_label (line 407) | async def test_select_option_by_label(
method test_select_option_by_value (line 427) | async def test_select_option_by_value(
method test_select_option_no_criteria (line 447) | async def test_select_option_no_criteria(
method test_hover (line 464) | async def test_hover(
method test_hover_ref_not_found (line 482) | async def test_hover_ref_not_found(
method test_press_key (line 501) | async def test_press_key(
method test_press_key_combo (line 519) | async def test_press_key_combo(
method test_upload_file (line 537) | async def test_upload_file(
method test_upload_file_ref_not_found (line 557) | async def test_upload_file_ref_not_found(
method test_handle_dialog_accept (line 576) | async def test_handle_dialog_accept(
method test_handle_dialog_dismiss (line 593) | async def test_handle_dialog_dismiss(
method test_handle_dialog_with_prompt (line 610) | async def test_handle_dialog_with_prompt(
method test_mouse_wheel (line 627) | async def test_mouse_wheel(
method test_mouse_wheel_scroll_up (line 646) | async def test_mouse_wheel_scroll_up(
method test_click_generic_error (line 667) | async def test_click_generic_error(
method test_type_ref_not_found (line 687) | async def test_type_ref_not_found(
method test_type_generic_error (line 708) | async def test_type_generic_error(
method test_fill_form_generic_error (line 730) | async def test_fill_form_generic_error(
method test_fill_form_ref_not_found (line 750) | async def test_fill_form_ref_not_found(
method test_select_option_ref_not_found (line 777) | async def test_select_option_ref_not_found(
method test_select_option_generic_error (line 798) | async def test_select_option_generic_error(
method test_select_option_by_index (line 820) | async def test_select_option_by_index(
method test_select_option_by_index_zero (line 840) | async def test_select_option_by_index_zero(
method test_hover_generic_error (line 860) | async def test_hover_generic_error(
method test_press_key_error (line 880) | async def test_press_key_error(
method test_upload_file_generic_error (line 900) | async def test_upload_file_generic_error(
method test_handle_dialog_error (line 922) | async def test_handle_dialog_error(
method test_mouse_wheel_error (line 939) | async def test_mouse_wheel_error(
method test_mouse_wheel_horizontal (line 959) | async def test_mouse_wheel_horizontal(
method test_wait_for_settled_timeout (line 979) | async def test_wait_for_settled_timeout(
class TestObservationTools (line 995) | class TestObservationTools:
method obs_tools (line 999) | def obs_tools(self, mock_connection_manager, mock_snapshot_manager):
method test_snapshot (line 1003) | async def test_snapshot(
method test_screenshot (line 1016) | async def test_screenshot(
method test_screenshot_full_page (line 1030) | async def test_screenshot_full_page(
method test_wait_for_text (line 1040) | async def test_wait_for_text(
method test_wait_for_selector (line 1053) | async def test_wait_for_selector(
method test_wait_for_no_criteria (line 1068) | async def test_wait_for_no_criteria(
method test_wait_for_timeout (line 1078) | async def test_wait_for_timeout(
method test_console_messages (line 1094) | async def test_console_messages(
method test_console_messages_empty (line 1110) | async def test_console_messages_empty(
method test_network_requests (line 1126) | async def test_network_requests(
method test_network_requests_empty (line 1147) | async def test_network_requests_empty(
method test_evaluate_returns_string (line 1158) | async def test_evaluate_returns_string(
method test_evaluate_returns_object (line 1171) | async def test_evaluate_returns_object(
method test_evaluate_returns_null (line 1185) | async def test_evaluate_returns_null(
method test_evaluate_error (line 1198) | async def test_evaluate_error(
method test_snapshot_error (line 1212) | async def test_snapshot_error(
method test_snapshot_with_selector (line 1223) | async def test_snapshot_with_selector(
method test_screenshot_error (line 1235) | async def test_screenshot_error(
method test_console_messages_error (line 1248) | async def test_console_messages_error(
method test_network_requests_error (line 1259) | async def test_network_requests_error(
method test_evaluate_returns_number (line 1270) | async def test_evaluate_returns_number(
method test_wait_for_error_no_page (line 1283) | async def test_wait_for_error_no_page(
method test_register_evaluate_disabled (line 1294) | def test_register_evaluate_disabled(self, mock_connection_manager, moc...
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_unit_management.py
function mock_connection_manager (line 29) | def mock_connection_manager():
function mock_snapshot_manager (line 39) | def mock_snapshot_manager():
function mock_browser (line 47) | def mock_browser():
function management_tools (line 72) | def management_tools(mock_connection_manager, mock_snapshot_manager):
function _setup_browser (line 77) | def _setup_browser(mock_connection_manager, mock_browser):
class TestBrowserTabs (line 83) | class TestBrowserTabs:
method test_list_tabs (line 86) | async def test_list_tabs(
method test_new_tab (line 102) | async def test_new_tab(
method test_new_tab_with_url (line 127) | async def test_new_tab_with_url(
method test_select_tab (line 152) | async def test_select_tab(
method test_select_tab_out_of_range (line 174) | async def test_select_tab_out_of_range(
method test_close_tab (line 187) | async def test_close_tab(
method test_close_last_tab_error (line 207) | async def test_close_last_tab_error(self, management_tools, mock_ctx, ...
method test_no_connection (line 225) | async def test_no_connection(self, management_tools, mock_ctx, mock_co...
method test_unknown_action (line 238) | async def test_unknown_action(
method test_select_tab_missing_index (line 251) | async def test_select_tab_missing_index(
method test_close_tab_missing_index (line 264) | async def test_close_tab_missing_index(
method test_close_tab_out_of_range (line 277) | async def test_close_tab_out_of_range(
method test_new_tab_error_cleans_up (line 290) | async def test_new_tab_error_cleans_up(
method test_tabs_generic_exception (line 307) | async def test_tabs_generic_exception(
method test_list_tabs_empty (line 321) | async def test_list_tabs_empty(self, management_tools, mock_ctx, mock_...
class TestBrowserClose (line 337) | class TestBrowserClose:
method test_close_page (line 340) | async def test_close_page(
method test_close_page_error (line 362) | async def test_close_page_error(
method test_close_last_page_error (line 373) | async def test_close_last_page_error(
method test_close_page_no_remaining_context (line 390) | async def test_close_page_no_remaining_context(
class TestBrowserResize (line 403) | class TestBrowserResize:
method test_resize_viewport (line 406) | async def test_resize_viewport(
method test_resize_error (line 422) | async def test_resize_error(
class TestBrowserTabsEdgeCases (line 436) | class TestBrowserTabsEdgeCases:
method test_new_tab_invalid_scheme (line 439) | async def test_new_tab_invalid_scheme(
method test_close_tab_no_remaining_pages (line 452) | async def test_close_tab_no_remaining_pages(
method test_tabs_generic_exception_snapshot_also_fails (line 481) | async def test_tabs_generic_exception_snapshot_also_fails(
class TestBrowserCloseEdgeCases (line 495) | class TestBrowserCloseEdgeCases:
method test_close_page_post_close_context_raises (line 498) | async def test_close_page_post_close_context_raises(
method test_close_page_post_close_empty_pages (line 531) | async def test_close_page_post_close_empty_pages(
class TestBrowserResizeEdgeCases (line 562) | class TestBrowserResizeEdgeCases:
method test_resize_out_of_bounds (line 565) | async def test_resize_out_of_bounds(self, management_tools, mock_ctx, ...
class TestToolRegistration (line 575) | class TestToolRegistration:
method test_register_tools (line 578) | def test_register_tools(self, management_tools):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_unit_server_integration.py
class TestIsServiceEnabled (line 31) | class TestIsServiceEnabled:
method test_default_no_env_vars (line 34) | def test_default_no_env_vars(self, monkeypatch):
method test_disable_browser (line 43) | def test_disable_browser(self, monkeypatch):
method test_enable_browser_only (line 52) | def test_enable_browser_only(self, monkeypatch):
method test_both_set_enable_wins (line 61) | def test_both_set_enable_wins(self, monkeypatch):
method test_empty_after_split (line 70) | def test_empty_after_split(self, monkeypatch):
method test_case_insensitive (line 79) | def test_case_insensitive(self, monkeypatch):
method test_whitespace_handling (line 87) | def test_whitespace_handling(self, monkeypatch):
class TestCleanupStaleSessions (line 102) | class TestCleanupStaleSessions:
method test_prunes_stale_session (line 105) | async def test_prunes_stale_session(self):
method test_skips_connected_session (line 127) | async def test_skips_connected_session(self):
method test_handles_value_error (line 149) | async def test_handles_value_error(self):
method test_handles_generic_exception (line 168) | async def test_handles_generic_exception(self):
method test_handles_get_session_ids_error (line 187) | async def test_handles_get_session_ids_error(self):
class TestRegisterBrowserTools (line 208) | class TestRegisterBrowserTools:
method test_register_succeeds (line 211) | def test_register_succeeds(self):
method test_registration_error_includes_group_name (line 222) | def test_registration_error_includes_group_name(self):
class TestServerLifespan (line 242) | class TestServerLifespan:
method test_lifespan_with_browser_enabled (line 245) | async def test_lifespan_with_browser_enabled(self):
method test_lifespan_with_browser_disabled (line 262) | async def test_lifespan_with_browser_disabled(self):
method test_lifespan_cleans_up_on_exception (line 272) | async def test_lifespan_cleans_up_on_exception(self):
class TestIdempotentCleanup (line 298) | class TestIdempotentCleanup:
method test_cleanup_called_twice_is_noop_second_time (line 301) | async def test_cleanup_called_twice_is_noop_second_time(self):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_unit_session.py
function session_tools (line 23) | def session_tools():
class TestStartBrowserSession (line 28) | class TestStartBrowserSession:
method test_start_session_default_params (line 31) | async def test_start_session_default_params(
method test_start_session_custom_params (line 66) | async def test_start_session_custom_params(self, session_tools, mock_c...
method test_start_session_with_extensions (line 95) | async def test_start_session_with_extensions(
method test_start_session_with_proxy_configuration (line 130) | async def test_start_session_with_proxy_configuration(
method test_start_session_with_profile_configuration (line 162) | async def test_start_session_with_profile_configuration(
method test_start_session_api_error (line 190) | async def test_start_session_api_error(self, session_tools, mock_ctx, ...
method test_start_session_viewport_out_of_bounds (line 201) | async def test_start_session_viewport_out_of_bounds(
method test_start_session_missing_streams (line 212) | async def test_start_session_missing_streams(
class TestGetBrowserSession (line 229) | class TestGetBrowserSession:
method test_get_session (line 232) | async def test_get_session(self, session_tools, mock_ctx, mock_browser...
method test_get_session_not_found (line 262) | async def test_get_session_not_found(self, session_tools, mock_ctx, mo...
class TestStopBrowserSession (line 275) | class TestStopBrowserSession:
method test_stop_session (line 278) | async def test_stop_session(self, session_tools, mock_ctx, mock_browse...
method test_stop_session_no_connection_manager (line 296) | async def test_stop_session_no_connection_manager(self, mock_ctx, mock...
method test_stop_session_no_snapshot_manager (line 305) | async def test_stop_session_no_snapshot_manager(self, mock_ctx, mock_b...
method test_stop_session_api_error (line 317) | async def test_stop_session_api_error(self, session_tools, mock_ctx, m...
class TestListBrowserSessions (line 332) | class TestListBrowserSessions:
method test_list_sessions (line 335) | async def test_list_sessions(self, session_tools, mock_ctx, mock_brows...
method test_list_sessions_empty (line 361) | async def test_list_sessions_empty(self, session_tools, mock_ctx, mock...
method test_list_sessions_respects_max_results (line 372) | async def test_list_sessions_respects_max_results(
method test_list_sessions_api_error (line 392) | async def test_list_sessions_api_error(self, session_tools, mock_ctx, ...
class TestStartSessionAutoConnect (line 402) | class TestStartSessionAutoConnect:
method test_start_session_auto_connects_playwright (line 405) | async def test_start_session_auto_connects_playwright(self, mock_ctx, ...
method test_start_session_region_consistent (line 431) | async def test_start_session_region_consistent(self, mock_ctx, monkeyp...
class TestStartSessionOrphanCleanup (line 466) | class TestStartSessionOrphanCleanup:
method test_start_session_stops_orphan_on_connect_failure (line 469) | async def test_start_session_stops_orphan_on_connect_failure(
method test_start_session_orphan_cleanup_failure_still_raises_original (line 495) | async def test_start_session_orphan_cleanup_failure_still_raises_origi...
class TestToStr (line 520) | class TestToStr:
method test_to_str_with_string (line 523) | def test_to_str_with_string(self):
method test_to_str_with_none (line 529) | def test_to_str_with_none(self):
method test_to_str_converts_datetime (line 535) | def test_to_str_converts_datetime(self):
class TestToolRegistration (line 546) | class TestToolRegistration:
method test_register_tools (line 549) | def test_register_tools(self, session_tools):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_unit_snapshot.py
function _node (line 25) | def _node(node_id, role, name='', parent_id=None, properties=None, ignor...
function _prop (line 39) | def _prop(name, value):
function snapshot_manager (line 45) | def snapshot_manager():
function mock_page (line 51) | def mock_page():
function _get_cdp (line 67) | def _get_cdp(mock_page):
class TestSnapshotCapture (line 118) | class TestSnapshotCapture:
method test_simple_login_page (line 121) | async def test_simple_login_page(self, snapshot_manager, mock_page):
method test_properties_included (line 134) | async def test_properties_included(self, snapshot_manager, mock_page):
method test_nested_indentation (line 145) | async def test_nested_indentation(self, snapshot_manager, mock_page):
method test_empty_tree (line 158) | async def test_empty_tree(self, snapshot_manager, mock_page):
method test_ignored_nodes_skipped_children_promoted (line 167) | async def test_ignored_nodes_skipped_children_promoted(self, snapshot_...
method test_only_interactable_get_refs (line 176) | async def test_only_interactable_get_refs(self, snapshot_manager, mock...
method test_long_name_truncated (line 188) | async def test_long_name_truncated(self, snapshot_manager, mock_page):
method test_snapshot_error_handling (line 201) | async def test_snapshot_error_handling(self, snapshot_manager, mock_pa...
method test_no_root_node (line 210) | async def test_no_root_node(self, snapshot_manager, mock_page):
method test_property_pressed (line 222) | async def test_property_pressed(self, snapshot_manager, mock_page):
method test_property_selected (line 234) | async def test_property_selected(self, snapshot_manager, mock_page):
method test_property_required (line 246) | async def test_property_required(self, snapshot_manager, mock_page):
method test_long_value_truncated (line 258) | async def test_long_value_truncated(self, snapshot_manager, mock_page):
class TestRefResolution (line 275) | class TestRefResolution:
method test_resolve_valid_ref (line 278) | async def test_resolve_valid_ref(self, snapshot_manager, mock_page):
method test_resolve_invalid_ref (line 291) | async def test_resolve_invalid_ref(self, snapshot_manager, mock_page):
method test_resolve_after_recapture (line 299) | async def test_resolve_after_recapture(self, snapshot_manager, mock_pa...
method test_resolve_ref_no_snapshot (line 322) | async def test_resolve_ref_no_snapshot(self, snapshot_manager, mock_pa...
method test_resolve_duplicate_names_uses_nth (line 327) | async def test_resolve_duplicate_names_uses_nth(self, snapshot_manager...
method test_resolve_unique_name_no_nth (line 348) | async def test_resolve_unique_name_no_nth(self, snapshot_manager, mock...
method test_resolve_ref_nameless_element (line 361) | async def test_resolve_ref_nameless_element(self, snapshot_manager, mo...
class TestScopedSnapshot (line 379) | class TestScopedSnapshot:
method _make_cdp_dispatcher (line 410) | def _make_cdp_dispatcher(
method test_selector_scoped_capture (line 445) | async def test_selector_scoped_capture(self, snapshot_manager, mock_pa...
method test_selector_not_found_falls_back (line 466) | async def test_selector_not_found_falls_back(self, snapshot_manager, m...
method test_no_selector_skips_dom_calls (line 478) | async def test_no_selector_skips_dom_calls(self, snapshot_manager, moc...
method test_dom_error_falls_back (line 492) | async def test_dom_error_falls_back(self, snapshot_manager, mock_page):
method test_partial_ax_tree_failure_falls_back (line 513) | async def test_partial_ax_tree_failure_falls_back(self, snapshot_manag...
method test_scoped_snapshot_empty_formatted_fallback (line 530) | async def test_scoped_snapshot_empty_formatted_fallback(self, snapshot...
method test_scoped_snapshot_fallback_cdp_error (line 551) | async def test_scoped_snapshot_fallback_cdp_error(self, snapshot_manag...
method test_queryAXTree_empty_nodes_falls_back (line 585) | async def test_queryAXTree_empty_nodes_falls_back(self, snapshot_manag...
class TestFormatCdpNode (line 597) | class TestFormatCdpNode:
method test_format_cdp_node_missing_node (line 600) | def test_format_cdp_node_missing_node(self, snapshot_manager):
method test_format_node_non_dict_value (line 608) | def test_format_node_non_dict_value(self, snapshot_manager):
method test_format_node_unrecognized_property (line 628) | def test_format_node_unrecognized_property(self, snapshot_manager):
method test_format_node_no_children_no_properties (line 649) | def test_format_node_no_children_no_properties(self, snapshot_manager):
class TestScopedSnapshotEdgeCases (line 669) | class TestScopedSnapshotEdgeCases:
method test_scoped_fallback_full_tree_no_root (line 672) | async def test_scoped_fallback_full_tree_no_root(self, snapshot_manage...
method test_resolve_selector_dom_disable_failure (line 704) | async def test_resolve_selector_dom_disable_failure(self, snapshot_man...
class TestCleanupSession (line 732) | class TestCleanupSession:
method test_cleanup_session (line 735) | async def test_cleanup_session(self, snapshot_manager, mock_page):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/conftest.py
function tests_setup_and_teardown (line 9) | def tests_setup_and_teardown():
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_cache.py
class TestCache (line 21) | class TestCache:
method setup_method (line 24) | def setup_method(self):
method test_load_links_only (line 34) | def test_load_links_only(self, mock_index_variants, mock_normalize, mo...
method test_ensure_ready_calls_load_links_only (line 57) | def test_ensure_ready_calls_load_links_only(self):
method test_ensure_ready_skips_when_loaded (line 69) | def test_ensure_ready_skips_when_loaded(self):
method test_ensure_page_fetches_new_page (line 83) | def test_ensure_page_fetches_new_page(self, mock_format_title, mock_fe...
method test_ensure_page_returns_cached (line 102) | def test_ensure_page_returns_cached(self):
method test_ensure_page_handles_fetch_error (line 120) | def test_ensure_page_handles_fetch_error(self, mock_fetch):
method test_get_index_returns_current_index (line 132) | def test_get_index_returns_current_index(self):
method test_get_index_returns_none_when_not_loaded (line 144) | def test_get_index_returns_none_when_not_loaded(self):
method test_get_url_cache_returns_cache_dict (line 155) | def test_get_url_cache_returns_cache_dict(self):
method test_get_url_titles_returns_titles_dict (line 167) | def test_get_url_titles_returns_titles_dict(self):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_config.py
class TestConfig (line 20) | class TestConfig:
method test_config_custom_values (line 23) | def test_config_custom_values(self):
method test_config_llm_texts_url_is_list (line 43) | def test_config_llm_texts_url_is_list(self):
method test_global_doc_config_exists (line 52) | def test_global_doc_config_exists(self):
method test_config_timeout_is_float (line 62) | def test_config_timeout_is_float(self):
method test_config_user_agent_format (line 71) | def test_config_user_agent_format(self):
method test_config_llm_texts_url_default_is_valid_url (line 81) | def test_config_llm_texts_url_default_is_valid_url(self):
method test_config_supports_multiple_llm_urls (line 91) | def test_config_supports_multiple_llm_urls(self):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_doc_fetcher.py
class TestDocFetcher (line 21) | class TestDocFetcher:
method test_get_success (line 25) | def test_get_success(self, mock_urlopen):
method test_get_handles_encoding_errors (line 39) | def test_get_handles_encoding_errors(self, mock_urlopen):
method test_parse_llms_txt_extracts_links (line 53) | def test_parse_llms_txt_extracts_links(self):
method test_parse_llms_txt_handles_empty_titles (line 74) | def test_parse_llms_txt_handles_empty_titles(self):
method test_html_to_text_removes_script_style (line 87) | def test_html_to_text_removes_script_style(self):
method test_html_to_text_removes_tags (line 112) | def test_html_to_text_removes_tags(self):
method test_html_to_text_unescapes_entities (line 128) | def test_html_to_text_unescapes_entities(self):
method test_extract_html_title_from_title_tag (line 139) | def test_extract_html_title_from_title_tag(self):
method test_extract_html_title_from_og_meta (line 150) | def test_extract_html_title_from_og_meta(self):
method test_extract_html_title_from_h1 (line 161) | def test_extract_html_title_from_h1(self):
method test_extract_html_title_returns_none_when_not_found (line 172) | def test_extract_html_title_returns_none_when_not_found(self):
method test_extract_html_title_unescapes_entities (line 183) | def test_extract_html_title_unescapes_entities(self):
method test_fetch_and_clean_html_content (line 195) | def test_fetch_and_clean_html_content(self, mock_get):
method test_fetch_and_clean_plain_text_content (line 220) | def test_fetch_and_clean_plain_text_content(self, mock_get):
method test_fetch_and_clean_markdown_content (line 235) | def test_fetch_and_clean_markdown_content(self, mock_get):
method test_fetch_and_clean_html_without_title (line 258) | def test_fetch_and_clean_html_without_title(self, mock_get):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_indexer.py
class TestIndexer (line 20) | class TestIndexer:
method test_index_search_initialization (line 23) | def test_index_search_initialization(self):
method test_add_document_basic (line 33) | def test_add_document_basic(self):
method test_add_document_with_markdown_headers (line 55) | def test_add_document_with_markdown_headers(self):
method test_add_document_with_code_blocks (line 75) | def test_add_document_with_code_blocks(self):
method test_add_document_with_links (line 95) | def test_add_document_with_links(self):
method test_add_multiple_documents (line 115) | def test_add_multiple_documents(self):
method test_search_empty_index (line 137) | def test_search_empty_index(self):
method test_search_single_document (line 148) | def test_search_single_document(self):
method test_search_multiple_documents_ranking (line 169) | def test_search_multiple_documents_ranking(self):
method test_search_respects_k_limit (line 218) | def test_search_respects_k_limit(self):
method test_search_multi_token_query (line 239) | def test_search_multi_token_query(self):
method test_search_case_insensitive (line 277) | def test_search_case_insensitive(self):
method test_title_boost_empty_content (line 299) | def test_title_boost_empty_content(self):
method test_title_boost_short_vs_long_content (line 331) | def test_title_boost_short_vs_long_content(self):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_init.py
class TestInit (line 21) | class TestInit:
method test_version (line 24) | def test_version(self):
method test_module_reload (line 43) | def test_module_reload(self):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_main.py
class TestMain (line 20) | class TestMain:
method test_main_function (line 25) | def test_main_function(self, mock_cache, mock_mcp):
method test_module_execution (line 36) | def test_module_execution(self):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_server.py
class TestSearchDocs (line 25) | class TestSearchDocs:
method test_search_agentcore_docs_with_results (line 32) | def test_search_agentcore_docs_with_results(
method test_search_agentcore_docs_no_index (line 74) | def test_search_agentcore_docs_no_index(self, mock_get_index, mock_ens...
method test_search_agentcore_docs_empty_results (line 89) | def test_search_agentcore_docs_empty_results(
method test_search_agentcore_docs_hydrates_top_results (line 109) | def test_search_agentcore_docs_hydrates_top_results(
class TestFetchDoc (line 146) | class TestFetchDoc:
method test_fetch_agentcore_doc_success (line 151) | def test_fetch_agentcore_doc_success(self, mock_ensure_page, mock_ensu...
method test_fetch_agentcore_doc_failure (line 173) | def test_fetch_agentcore_doc_failure(self, mock_ensure_page, mock_ensu...
method test_fetch_agentcore_doc_http_url (line 190) | def test_fetch_agentcore_doc_http_url(self, mock_ensure_page, mock_ens...
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_text_processor.py
class TestTextProcessor (line 20) | class TestTextProcessor:
method test_normalize_collapses_whitespace (line 23) | def test_normalize_collapses_whitespace(self):
method test_title_from_url_extracts_slug (line 37) | def test_title_from_url_extracts_slug(self):
method test_format_display_title_prioritizes_curated (line 62) | def test_format_display_title_prioritizes_curated(self):
method test_format_display_title_uses_extracted_when_available (line 71) | def test_format_display_title_uses_extracted_when_available(self):
method test_format_display_title_falls_back_to_url (line 80) | def test_format_display_title_falls_back_to_url(self):
method test_format_display_title_handles_generic_titles (line 89) | def test_format_display_title_handles_generic_titles(self):
method test_index_title_variants_generates_variants (line 100) | def test_index_title_variants_generates_variants(self):
method test_index_title_variants_handles_numeric_substitution (line 112) | def test_index_title_variants_handles_numeric_substitution(self):
method test_normalize_for_comparison_removes_punctuation (line 122) | def test_normalize_for_comparison_removes_punctuation(self):
method test_make_snippet_returns_title_for_empty_page (line 130) | def test_make_snippet_returns_title_for_empty_page(self):
method test_make_snippet_removes_code_blocks (line 143) | def test_make_snippet_removes_code_blocks(self):
method test_make_snippet_skips_title_line (line 165) | def test_make_snippet_skips_title_line(self):
method test_make_snippet_skips_headings_and_toc (line 181) | def test_make_snippet_skips_headings_and_toc(self):
method test_make_snippet_truncates_long_content (line 204) | def test_make_snippet_truncates_long_content(self):
method test_make_snippet_stops_at_sentence_end (line 215) | def test_make_snippet_stops_at_sentence_end(self):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_tools.py
class TestMemoryTool (line 20) | class TestMemoryTool:
method test_manage_agentcore_memory_returns_guide (line 23) | def test_manage_agentcore_memory_returns_guide(self):
class TestRuntimeTool (line 33) | class TestRuntimeTool:
method test_manage_agentcore_runtime_returns_guide (line 36) | def test_manage_agentcore_runtime_returns_guide(self):
class TestGatewayTool (line 46) | class TestGatewayTool:
method test_manage_agentcore_gateway_returns_guide (line 49) | def test_manage_agentcore_gateway_returns_guide(self):
FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_url_validator.py
class TestURLValidator (line 25) | class TestURLValidator:
method test_init_with_domain_prefixes (line 28) | def test_init_with_domain_prefixes(self):
method test_is_url_allowed (line 37) | def test_is_url_allowed(self):
method test_validate_urls_all_valid (line 53) | def test_validate_urls_all_valid(self):
method test_validate_urls_some_invalid (line 66) | def test_validate_urls_some_invalid(self):
method test_validate_urls_empty_list (line 82) | def test_validate_urls_empty_list(self):
FILE: src/amazon-kendra-index-mcp-server/awslabs/amazon_kendra_index_mcp_server/server.py
function kendra_list_indexes_tool (line 35) | async def kendra_list_indexes_tool(
function kendra_query_tool (line 105) | async def kendra_query_tool(
function main (line 167) | def main():
FILE: src/amazon-kendra-index-mcp-server/awslabs/amazon_kendra_index_mcp_server/util.py
function get_kendra_client (line 27) | def get_kendra_client(region=None) -> KendraClient:
FILE: src/amazon-kendra-index-mcp-server/tests/test_init.py
class TestInit (line 20) | class TestInit:
method test_version (line 23) | def test_version(self):
method test_module_reload (line 40) | def test_module_reload(self):
FILE: src/amazon-kendra-index-mcp-server/tests/test_main.py
class TestMain (line 20) | class TestMain:
method test_main_default (line 25) | def test_main_default(self, mock_run):
method test_module_execution (line 34) | def test_module_execution(self):
FILE: src/amazon-kendra-index-mcp-server/tests/test_server.py
function test_kendra_query_tool (line 25) | async def test_kendra_query_tool(mocker):
function test_kendra_query_tool_error_handling (line 103) | async def test_kendra_query_tool_error_handling(mocker):
function test_kendra_list_indexes_tool (line 132) | async def test_kendra_list_indexes_tool(mocker):
function test_kendra_list_indexes_tool_pagination (line 198) | async def test_kendra_list_indexes_tool_pagination(mocker):
function test_lkendra_list_indexes_tool_error_handling (line 278) | async def test_lkendra_list_indexes_tool_error_handling(mocker):
FILE: src/amazon-keyspaces-mcp-server/awslabs/amazon_keyspaces_mcp_server/client.py
class SSLOptions (line 49) | class SSLOptions:
method __init__ (line 52) | def __init__(self, ssl_context=None, server_hostname=None):
class UnifiedCassandraClient (line 65) | class UnifiedCassandraClient:
method __init__ (line 68) | def __init__(self, database_config: DatabaseConfig):
method _create_cassandra_session (line 86) | def _create_cassandra_session(self) -> Session:
method _create_keyspaces_session (line 108) | def _create_keyspaces_session(self) -> Session:
method _create_ssl_context_for_keyspaces (line 150) | def _create_ssl_context_for_keyspaces(self) -> ssl.SSLContext:
method is_using_keyspaces (line 169) | def is_using_keyspaces(self) -> bool:
method list_keyspaces (line 173) | def list_keyspaces(self) -> List[KeyspaceInfo]:
method list_tables (line 201) | def list_tables(self, keyspace_name: str) -> List[TableInfo]:
method describe_keyspace (line 218) | def describe_keyspace(self, keyspace_name: str) -> Dict[str, Any]:
method describe_table (line 245) | def describe_table(self, keyspace_name: str, table_name: str) -> Dict[...
method execute_read_only_query (line 328) | def execute_read_only_query(
method _add_keyspaces_context (line 395) | def _add_keyspaces_context(self, details: Dict[str, Any]) -> None:
method _build_service_characteristics (line 400) | def _build_service_characteristics(self) -> Dict[str, Any]:
method close (line 420) | def close(self) -> None:
FILE: src/amazon-keyspaces-mcp-server/awslabs/amazon_keyspaces_mcp_server/config.py
class DatabaseConfig (line 29) | class DatabaseConfig:
method from_env (line 46) | def from_env(cls):
class AppConfig (line 63) | class AppConfig:
method from_env (line 69) | def from_env(cls):
FILE: src/amazon-keyspaces-mcp-server/awslabs/amazon_keyspaces_mcp_server/llm_context.py
function build_list_keyspaces_context (line 20) | def build_list_keyspaces_context(keyspaces: List[KeyspaceInfo]) -> str:
function build_list_tables_context (line 47) | def build_list_tables_context(keyspace_name: str, tables: List[TableInfo...
function build_keyspace_details_context (line 69) | def build_keyspace_details_context(keyspace_details: Dict[str, Any]) -> ...
function build_table_details_context (line 88) | def build_table_details_context(table_details: Dict[str, Any]) -> str:
function build_query_result_context (line 119) | def build_query_result_context(query_results: Dict[str, Any]) -> str:
function build_query_analysis_context (line 159) | def build_query_analysis_context(analysis_result: QueryAnalysisResult) -...
function build_cassandra_knowledge (line 196) | def build_cassandra_knowledge() -> Dict[str, str]:
function build_amazon_keyspaces_knowledge (line 212) | def build_amazon_keyspaces_knowledge() -> Dict[str, str]:
function dict_to_markdown (line 230) | def dict_to_markdown(data: Dict[str, Any], level: int = 0) -> str:
FILE: src/amazon-keyspaces-mcp-server/awslabs/amazon_keyspaces_mcp_server/models.py
class KeyspaceInfo (line 21) | class KeyspaceInfo:
class ColumnInfo (line 30) | class ColumnInfo:
class TableInfo (line 41) | class TableInfo:
class QueryResult (line 50) | class QueryResult:
class QueryAnalysisResult (line 60) | class QueryAnalysisResult:
FILE: src/amazon-keyspaces-mcp-server/awslabs/amazon_keyspaces_mcp_server/server.py
function get_proxy (line 51) | def get_proxy():
function list_keyspaces (line 78) | def list_keyspaces(
function list_tables (line 89) | def list_tables(
function describe_keyspace (line 101) | def describe_keyspace(
function describe_table (line 113) | def describe_table(
function execute_query (line 126) | def execute_query(
function analyze_query_performance (line 139) | def analyze_query_performance(
class KeyspacesMcpStdioServer (line 148) | class KeyspacesMcpStdioServer:
method __init__ (line 151) | def __init__(
method handle_list_keyspaces (line 162) | def handle_list_keyspaces(self, ctx: Optional[Any] = None) -> str:
method _handle_list_tables (line 186) | def _handle_list_tables(self, keyspace: str, ctx: Optional[Context] = ...
method _handle_describe_keyspace (line 213) | def _handle_describe_keyspace(self, keyspace: str, ctx: Optional[Conte...
method _handle_describe_table (line 252) | def _handle_describe_table(
method _handle_execute_query (line 320) | def _handle_execute_query(
method _handle_analyze_query_performance (line 391) | def _handle_analyze_query_performance(
function main (line 427) | def main():
FILE: src/amazon-keyspaces-mcp-server/awslabs/amazon_keyspaces_mcp_server/services.py
class DataService (line 26) | class DataService:
method __init__ (line 29) | def __init__(self, cassandra_client: UnifiedCassandraClient):
method execute_read_only_query (line 36) | def execute_read_only_query(self, keyspace_name: str, query: str) -> D...
class SchemaService (line 76) | class SchemaService:
method __init__ (line 79) | def __init__(self, cassandra_client: UnifiedCassandraClient):
method list_keyspaces (line 86) | def list_keyspaces(self) -> List[KeyspaceInfo]:
method list_tables (line 91) | def list_tables(self, keyspace_name: str) -> List[TableInfo]:
method describe_keyspace (line 96) | def describe_keyspace(self, keyspace_name: str) -> Dict[str, Any]:
method describe_table (line 101) | def describe_table(self, keyspace_name: str, table_name: str) -> Dict[...
class QueryAnalysisService (line 107) | class QueryAnalysisService:
method __init__ (line 110) | def __init__(self, cassandra_client: UnifiedCassandraClient, schema_se...
method analyze_query (line 116) | def analyze_query(self, keyspace_name: str, query: str) -> QueryAnalys...
method _normalize_query (line 195) | def _normalize_query(self, query: str) -> str:
method _extract_table_name (line 199) | def _extract_table_name(self, query: str) -> str:
method _extract_where_conditions (line 215) | def _extract_where_conditions(self, query: str) -> List[str]:
method _extract_partition_key_columns (line 244) | def _extract_partition_key_columns(self, table_details: Dict[str, Any]...
method _extract_clustering_columns (line 257) | def _extract_clustering_columns(self, table_details: Dict[str, Any]) -...
method _check_partition_key_usage (line 270) | def _check_partition_key_usage(
method _check_clustering_column_usage (line 279) | def _check_clustering_column_usage(
method _check_secondary_index_usage (line 287) | def _check_secondary_index_usage(
method _generate_performance_assessment (line 309) | def _generate_performance_assessment(
FILE: src/amazon-keyspaces-mcp-server/tests/test_client.py
class TestUnifiedCassandraClient (line 23) | class TestUnifiedCassandraClient(unittest.TestCase):
method setUp (line 26) | def setUp(self):
method test_create_cassandra_session (line 58) | def test_create_cassandra_session(self, mock_cluster_class):
method test_create_keyspaces_session_with_ssl_options (line 92) | def test_create_keyspaces_session_with_ssl_options(
method test_create_keyspaces_session_without_ssl_options (line 148) | def test_create_keyspaces_session_without_ssl_options(
method test_ssl_context_load_error (line 201) | def test_ssl_context_load_error(self, mock_ssl, mock_cluster_class):
method test_is_using_keyspaces (line 222) | def test_is_using_keyspaces(self):
method test_list_keyspaces (line 233) | def test_list_keyspaces(self):
method test_describe_keyspace (line 268) | def test_describe_keyspace(self):
method test_list_tables (line 315) | def test_list_tables(self):
method test_describe_keyspace_not_found (line 350) | def test_describe_keyspace_not_found(self):
method test_describe_table (line 370) | def test_describe_table(self):
method test_describe_table_not_found (line 435) | def test_describe_table_not_found(self):
method test_execute_read_only_query (line 452) | def test_execute_read_only_query(self):
method test_execute_read_only_query_with_params (line 501) | def test_execute_read_only_query_with_params(self):
method test_execute_read_only_query_non_select (line 542) | def test_execute_read_only_query_non_select(self):
method test_execute_read_only_query_unsafe_operations (line 554) | def test_execute_read_only_query_unsafe_operations(self):
method test_close (line 566) | def test_close(self):
FILE: src/amazon-keyspaces-mcp-server/tests/test_init.py
class TestInit (line 17) | class TestInit:
method test_version (line 20) | def test_version(self):
method test_module_reload (line 37) | def test_module_reload(self):
FILE: src/amazon-keyspaces-mcp-server/tests/test_main.py
class TestMain (line 17) | class TestMain:
method test_main_default (line 22) | def test_main_default(self, mock_run):
method test_module_execution (line 37) | def test_module_execution(self):
FILE: src/amazon-keyspaces-mcp-server/tests/test_query_analysis_service.py
class TestQueryAnalysisService (line 19) | class TestQueryAnalysisService(unittest.TestCase):
method setUp (line 22) | def setUp(self):
method test_normalize_query (line 30) | def test_normalize_query(self):
method test_extract_table_name_simple (line 36) | def test_extract_table_name_simple(self):
method test_extract_table_name_with_keyspace (line 42) | def test_extract_table_name_with_keyspace(self):
method test_extract_where_conditions_simple (line 48) | def test_extract_where_conditions_simple(self):
method test_extract_where_conditions_multiple (line 54) | def test_extract_where_conditions_multiple(self):
method test_extract_where_conditions_with_order_by (line 60) | def test_extract_where_conditions_with_order_by(self):
method test_extract_where_conditions_with_limit (line 66) | def test_extract_where_conditions_with_limit(self):
method test_extract_partition_key_columns (line 72) | def test_extract_partition_key_columns(self):
method test_extract_clustering_columns (line 84) | def test_extract_clustering_columns(self):
method test_check_partition_key_usage_all_used (line 96) | def test_check_partition_key_usage_all_used(self):
method test_check_partition_key_usage_not_all_used (line 105) | def test_check_partition_key_usage_not_all_used(self):
method test_check_clustering_column_usage_used (line 114) | def test_check_clustering_column_usage_used(self):
method test_check_clustering_column_usage_not_used (line 123) | def test_check_clustering_column_usage_not_used(self):
method test_check_secondary_index_usage_used (line 132) | def test_check_secondary_index_usage_used(self):
method test_check_secondary_index_usage_not_used (line 141) | def test_check_secondary_index_usage_not_used(self):
method test_check_secondary_index_usage_no_indexes (line 150) | def test_check_secondary_index_usage_no_indexes(self):
method test_check_secondary_index_usage_with_quotes (line 159) | def test_check_secondary_index_usage_with_quotes(self):
method test_generate_performance_assessment_good_query (line 168) | def test_generate_performance_assessment_good_query(self):
method test_generate_performance_assessment_bad_query (line 186) | def test_generate_performance_assessment_bad_query(self):
method test_generate_performance_assessment_with_secondary_index (line 204) | def test_generate_performance_assessment_with_secondary_index(self):
method test_analyze_query_integration (line 220) | def test_analyze_query_integration(self):
method test_analyze_query_with_error (line 251) | def test_analyze_query_with_error(self):
method test_analyze_query_with_allow_filtering (line 265) | def test_analyze_query_with_allow_filtering(self):
method test_analyze_query_with_secondary_index (line 291) | def test_analyze_query_with_secondary_index(self):
method test_analyze_query_table_not_found (line 316) | def test_analyze_query_table_not_found(self):
method test_analyze_query_unable_to_determine_table (line 331) | def test_analyze_query_unable_to_determine_table(self):
FILE: src/amazon-keyspaces-mcp-server/tests/test_server.py
class TestServerTools (line 30) | class TestServerTools(unittest.TestCase):
method test_list_keyspaces (line 34) | def test_list_keyspaces(self, mock_get_proxy):
method test_list_tables (line 49) | def test_list_tables(self, mock_get_proxy):
method test_describe_keyspace (line 64) | def test_describe_keyspace(self, mock_get_proxy):
method test_describe_table (line 79) | def test_describe_table(self, mock_get_proxy):
method test_execute_query (line 94) | def test_execute_query(self, mock_get_proxy):
method test_analyze_query_performance (line 111) | def test_analyze_query_performance(self, mock_get_proxy):
class TestKeyspacesMcpStdioServer (line 128) | class TestKeyspacesMcpStdioServer(unittest.TestCase):
method setUp (line 131) | def setUp(self):
method test_handle_list_keyspaces (line 141) | def test_handle_list_keyspaces(self):
method test_handle_list_keyspaces_empty (line 158) | def test_handle_list_keyspaces_empty(self):
method test_handle_list_keyspaces_error (line 172) | def test_handle_list_keyspaces_error(self):
method test_handle_list_tables (line 184) | def test_handle_list_tables(self):
method test_handle_list_tables_empty (line 201) | def test_handle_list_tables_empty(self):
method test_handle_list_tables_error (line 215) | def test_handle_list_tables_error(self):
method test_handle_describe_keyspace (line 227) | def test_handle_describe_keyspace(self):
method test_handle_describe_keyspace_simple_strategy (line 249) | def test_handle_describe_keyspace_simple_strategy(self):
method test_handle_describe_keyspace_error (line 271) | def test_handle_describe_keyspace_error(self):
method test_handle_describe_table (line 283) | def test_handle_describe_table(self):
method test_handle_describe_table_with_clustering_columns (line 315) | def test_handle_describe_table_with_clustering_columns(self):
method test_handle_describe_table_error (line 348) | def test_handle_describe_table_error(self):
method test_handle_execute_query (line 360) | def test_handle_execute_query(self):
method test_handle_execute_query_no_rows (line 386) | def test_handle_execute_query_no_rows(self):
method test_handle_execute_query_many_rows (line 407) | def test_handle_execute_query_many_rows(self):
method test_handle_execute_query_non_select (line 432) | def test_handle_execute_query_non_select(self):
method test_handle_execute_query_unsafe_operations (line 445) | def test_handle_execute_query_unsafe_operations(self):
method test_handle_execute_query_error (line 458) | def test_handle_execute_query_error(self):
method test_handle_analyze_query_performance (line 474) | def test_handle_analyze_query_performance(self):
method test_handle_analyze_query_performance_no_recommendations (line 506) | def test_handle_analyze_query_performance_no_recommendations(self):
method test_handle_analyze_query_performance_error (line 537) | def test_handle_analyze_query_performance_error(self):
function test_get_proxy (line 556) | def test_get_proxy(mock_app_config, mock_client_class):
FILE: src/amazon-keyspaces-mcp-server/tests/test_services.py
class TestDataService (line 25) | class TestDataService(unittest.TestCase):
method setUp (line 28) | def setUp(self):
method test_execute_read_only_query_without_keyspace_qualifier (line 39) | def test_execute_read_only_query_without_keyspace_qualifier(self):
method test_execute_read_only_query_with_keyspace_qualifier (line 56) | def test_execute_read_only_query_with_keyspace_qualifier(self):
method test_execute_read_only_query_with_complex_query (line 69) | def test_execute_read_only_query_with_complex_query(self):
class TestSchemaService (line 84) | class TestSchemaService(unittest.TestCase):
method setUp (line 87) | def setUp(self):
method test_list_keyspaces (line 93) | def test_list_keyspaces(self):
method test_list_tables (line 110) | def test_list_tables(self):
method test_describe_keyspace (line 130) | def test_describe_keyspace(self):
method test_describe_table (line 151) | def test_describe_table(self):
FILE: src/amazon-mq-mcp-server/awslabs/amazon_mq_mcp_server/aws_service_mcp_generator.py
class AWSToolGenerator (line 36) | class AWSToolGenerator:
method __init__ (line 39) | def __init__(
method generate (line 68) | def generate(self):
method get_mcp (line 72) | def get_mcp(self):
method __register_operations (line 76) | def __register_operations(self):
method __get_client (line 100) | def __get_client(self, region: str = 'us-east-1') -> Any:
method __get_operations (line 110) | def __get_operations(self) -> List[str]:
method __handle_function_override (line 120) | def __handle_function_override(self, operation: str, func_override: An...
method __create_operation_function (line 132) | def __create_operation_function(
method __get_operation_input_parameters (line 237) | def __get_operation_input_parameters(
method __snake_to_camel (line 259) | def __snake_to_camel(self, snake_str: str) -> str:
method __validate_tool_configuration (line 263) | def __validate_tool_configuration(self):
FILE: src/amazon-mq-mcp-server/awslabs/amazon_mq_mcp_server/rabbitmq/admin.py
class RabbitMQAdmin (line 25) | class RabbitMQAdmin:
method __init__ (line 28) | def __init__(self, hostname: str, username: str, password: str):
method _make_request (line 36) | def _make_request(
method test_connection (line 45) | def test_connection(self):
method list_queues (line 49) | def list_queues(self) -> list[dict]:
method list_queues_by_vhost (line 54) | def list_queues_by_vhost(self, vhost: str = '/') -> list[dict]:
method list_exchanges (line 60) | def list_exchanges(self) -> list[dict]:
method list_exchanges_by_vhost (line 65) | def list_exchanges_by_vhost(self, vhost: str = '/') -> list[dict]:
method get_queue_info (line 71) | def get_queue_info(self, queue: str, vhost: str = '/') -> dict:
method delete_queue (line 77) | def delete_queue(self, queue: str, vhost: str = '/') -> None:
method purge_queue (line 83) | def purge_queue(self, queue: str, vhost: str = '/') -> None:
method get_exchange_info (line 89) | def get_exchange_info(self, exchange: str, vhost: str = '/') -> dict:
method delete_exchange (line 95) | def delete_exchange(self, exchange: str, vhost: str = '/') -> None:
method get_bindings (line 101) | def get_bindings(
method get_overview (line 118) | def get_overview(self) -> dict:
method list_vhosts (line 123) | def list_vhosts(self) -> dict:
method list_shovels (line 128) | def list_shovels(self) -> list[dict]:
method get_shovel_info (line 133) | def get_shovel_info(self, shovel_name: str, vhost: str = '/') -> dict:
method get_cluster_nodes (line 139) | def get_cluster_nodes(self) -> dict:
method get_node_information (line 144) | def get_node_information(self, node_name: str) -> dict:
method get_node_memory (line 149) | def get_node_memory(self, node_name: str) -> dict:
method list_connections (line 154) | def list_connections(self) -> dict:
method list_consumers (line 159) | def list_consumers(self) -> Any:
method list_users (line 164) | def list_users(self) -> Any:
method get_alarm_status (line 169) | def get_alarm_status(self) -> int:
method get_is_node_quorum_critical (line 174) | def get_is_node_quorum_critical(self) -> int:
method get_broker_definition (line 179) | def get_broker_definition(self) -> dict:
FILE: src/amazon-mq-mcp-server/awslabs/amazon_mq_mcp_server/rabbitmq/connection.py
class RabbitMQConnection (line 22) | class RabbitMQConnection:
method __init__ (line 25) | def __init__(self, hostname: str, username: str, password: str):
method get_channel (line 35) | def get_channel(self) -> tuple[Any, Any]:
function validate_rabbitmq_name (line 42) | def validate_rabbitmq_name(name: str, field_name: str) -> None:
FILE: src/amazon-mq-mcp-server/awslabs/amazon_mq_mcp_server/rabbitmq/handlers.py
function handle_get_guidelines (line 29) | def handle_get_guidelines(guideline_name: str):
function handle_enqueue (line 63) | def handle_enqueue(rabbitmq: RabbitMQConnection, queue: str, message: str):
function handle_fanout (line 71) | def handle_fanout(rabbitmq: RabbitMQConnection, exchange: str, message: ...
function handle_get_overview (line 86) | def handle_get_overview(rabbitmq_admin: RabbitMQAdmin) -> dict:
function handle_is_broker_in_alarm (line 91) | def handle_is_broker_in_alarm(rabbitmq_admin: RabbitMQAdmin) -> bool:
function handle_is_node_in_quorum_critical (line 97) | def handle_is_node_in_quorum_critical(rabbitmq_admin: RabbitMQAdmin) -> ...
function handle_get_definition (line 103) | def handle_get_definition(rabbitmq_admin: RabbitMQAdmin) -> dict:
function handle_list_connections (line 111) | def handle_list_connections(rabbitmq_admin: RabbitMQAdmin) -> list[Any]:
function handle_list_consumers (line 130) | def handle_list_consumers(rabbitmq_admin: RabbitMQAdmin) -> list[dict]:
function handle_get_cluster_nodes (line 138) | def handle_get_cluster_nodes(rabbitmq_admin: RabbitMQAdmin) -> list[dict]:
function handle_get_cluster_node_memory (line 163) | def handle_get_cluster_node_memory(rabbitmq_admin: RabbitMQAdmin, node_n...
function handle_list_queues (line 171) | def handle_list_queues(rabbitmq_admin: RabbitMQAdmin) -> List[str]:
function handle_list_queues_by_vhost (line 177) | def handle_list_queues_by_vhost(rabbitmq_admin: RabbitMQAdmin, vhost: st...
function handle_get_queue_info (line 183) | def handle_get_queue_info(rabbitmq_admin: RabbitMQAdmin, queue: str, vho...
function handle_delete_queue (line 188) | def handle_delete_queue(rabbitmq_admin: RabbitMQAdmin, queue: str, vhost...
function handle_purge_queue (line 193) | def handle_purge_queue(rabbitmq_admin: RabbitMQAdmin, queue: str, vhost:...
function handle_list_exchanges (line 201) | def handle_list_exchanges(rabbitmq_admin: RabbitMQAdmin) -> List[str]:
function handle_list_exchanges_by_vhost (line 207) | def handle_list_exchanges_by_vhost(rabbitmq_admin: RabbitMQAdmin, vhost:...
function handle_delete_exchange (line 213) | def handle_delete_exchange(rabbitmq_admin: RabbitMQAdmin, exchange: str,...
function handle_get_exchange_info (line 218) | def handle_get_exchange_info(
function handle_list_vhosts (line 228) | def handle_list_vhosts(rabbitmq_admin: RabbitMQAdmin) -> List[str]:
function handle_list_shovels (line 237) | def handle_list_shovels(rabbitmq_admin: RabbitMQAdmin) -> List[dict]:
function handle_shovel (line 242) | def handle_shovel(rabbitmq_admin: RabbitMQAdmin, shovel_name: str, vhost...
function handle_list_users (line 250) | def handle_list_users(rabbitmq_admin: RabbitMQAdmin) -> list[dict]:
FILE: src/amazon-mq-mcp-server/awslabs/amazon_mq_mcp_server/rabbitmq/module.py
class RabbitMQModule (line 43) | class RabbitMQModule:
method __init__ (line 46) | def __init__(self, mcp: FastMCP):
method register_rabbitmq_management_tools (line 52) | def register_rabbitmq_management_tools(self, allow_mutative_tools: boo...
method __register_critical_tools (line 59) | def __register_critical_tools(self):
method __register_read_only_tools (line 131) | def __register_read_only_tools(self):
method __register_mutative_tools (line 274) | def __register_mutative_tools(self):
FILE: src/amazon-mq-mcp-server/awslabs/amazon_mq_mcp_server/server.py
function create_broker_override (line 26) | def create_broker_override(mcp: FastMCP, mq_client_getter: BOTO3_CLIENT_...
function create_configuration_override (line 87) | def create_configuration_override(mcp: FastMCP, mq_client_getter: BOTO3_...
function allow_mutative_action_only_on_tagged_resource (line 110) | def allow_mutative_action_only_on_tagged_resource(
function main (line 135) | def main():
FILE: src/amazon-mq-mcp-server/tests/rabbitmq/conftest.py
function mock_rabbitmq_connection (line 22) | def mock_rabbitmq_connection():
function mock_rabbitmq_admin (line 31) | def mock_rabbitmq_admin():
function mock_mcp_server (line 37) | def mock_mcp_server():
FILE: src/amazon-mq-mcp-server/tests/rabbitmq/test_admin.py
class TestRabbitMQAdmin (line 23) | class TestRabbitMQAdmin:
method setup_method (line 26) | def setup_method(self):
method test_init_with_tls (line 30) | def test_init_with_tls(self):
method test_make_request_success (line 37) | def test_make_request_success(self, mock_request):
method test_make_request_failure (line 48) | def test_make_request_failure(self, mock_request):
method test_list_queues (line 57) | def test_list_queues(self, mock_request):
method test_list_queues_by_vhost (line 65) | def test_list_queues_by_vhost(self, mock_request):
method test_get_queue_info (line 73) | def test_get_queue_info(self, mock_request):
method test_delete_queue (line 81) | def test_delete_queue(self, mock_request):
method test_purge_queue (line 87) | def test_purge_queue(self, mock_request):
method test_list_exchanges (line 93) | def test_list_exchanges(self, mock_request):
method test_get_exchange_info (line 101) | def test_get_exchange_info(self, mock_request):
method test_delete_exchange (line 109) | def test_delete_exchange(self, mock_request):
method test_list_vhosts (line 115) | def test_list_vhosts(self, mock_request):
method test_list_shovels (line 123) | def test_list_shovels(self, mock_request):
method test_get_shovel_info (line 131) | def test_get_shovel_info(self, mock_request):
method test_list_exchanges_by_vhost (line 139) | def test_list_exchanges_by_vhost(self, mock_request):
method test_get_bindings_with_queue (line 147) | def test_get_bindings_with_queue(self, mock_request):
method test_get_bindings_with_exchange (line 155) | def test_get_bindings_with_exchange(self, mock_request):
method test_get_bindings_all (line 163) | def test_get_bindings_all(self, mock_request):
method test_get_overview (line 173) | def test_get_overview(self, mock_request):
method test_get_cluster_nodes (line 181) | def test_get_cluster_nodes(self, mock_request):
method test_get_node_information (line 189) | def test_get_node_information(self, mock_request):
method test_get_node_memory (line 197) | def test_get_node_memory(self, mock_request):
method test_list_connections (line 205) | def test_list_connections(self, mock_request):
method test_list_consumers (line 213) | def test_list_consumers(self, mock_request):
method test_list_users (line 221) | def test_list_users(self, mock_request):
method test_get_alarm_status (line 229) | def test_get_alarm_status(self, mock_request):
method test_get_is_node_quorum_critical (line 237) | def test_get_is_node_quorum_critical(self, mock_request):
FILE: src/amazon-mq-mcp-server/tests/rabbitmq/test_connection.py
class TestRabbitMQConnection (line 12) | class TestRabbitMQConnection:
method test_init_with_tls (line 15) | def test_init_with_tls(self):
method test_get_channel (line 23) | def test_get_channel(self, mock_connection_class):
class TestValidateRabbitMQName (line 36) | class TestValidateRabbitMQName:
method test_valid_names (line 39) | def test_valid_names(self):
method test_empty_name (line 45) | def test_empty_name(self):
method test_invalid_characters (line 52) | def test_invalid_characters(self):
method test_name_too_long (line 57) | def test_name_too_long(self):
FILE: src/amazon-mq-mcp-server/tests/rabbitmq/test_handlers.py
class TestAMQPHandlers (line 45) | class TestAMQPHandlers:
method test_handle_enqueue (line 48) | def test_handle_enqueue(self):
method test_handle_fanout (line 61) | def test_handle_fanout(self):
class TestQueueHandlers (line 77) | class TestQueueHandlers:
method test_handle_list_queues (line 80) | def test_handle_list_queues(self):
method test_handle_list_queues_by_vhost (line 91) | def test_handle_list_queues_by_vhost(self):
method test_handle_get_queue_info (line 99) | def test_handle_get_queue_info(self):
method test_handle_delete_queue (line 108) | def test_handle_delete_queue(self):
method test_handle_purge_queue (line 114) | def test_handle_purge_queue(self):
class TestExchangeHandlers (line 121) | class TestExchangeHandlers:
method test_handle_list_exchanges (line 124) | def test_handle_list_exchanges(self):
method test_handle_list_exchanges_by_vhost (line 135) | def test_handle_list_exchanges_by_vhost(self):
method test_handle_get_exchange_info (line 143) | def test_handle_get_exchange_info(self):
method test_handle_delete_exchange (line 152) | def test_handle_delete_exchange(self):
class TestVhostHandlers (line 159) | class TestVhostHandlers:
method test_handle_list_vhosts (line 162) | def test_handle_list_vhosts(self):
class TestShovelHandlers (line 174) | class TestShovelHandlers:
method test_handle_list_shovels (line 177) | def test_handle_list_shovels(self):
method test_handle_shovel (line 186) | def test_handle_shovel(self):
class TestDocHandlers (line 196) | class TestDocHandlers:
method test_handle_get_guidelines (line 199) | def test_handle_get_guidelines(self):
class TestHealthHandlers (line 212) | class TestHealthHandlers:
method test_handle_get_overview (line 215) | def test_handle_get_overview(self):
method test_handle_is_broker_in_alarm (line 224) | def test_handle_is_broker_in_alarm(self):
method test_handle_is_node_in_quorum_critical (line 232) | def test_handle_is_node_in_quorum_critical(self):
class TestConnectionHandlers (line 241) | class TestConnectionHandlers:
method test_handle_list_connections (line 244) | def test_handle_list_connections(self):
method test_handle_list_consumers (line 261) | def test_handle_list_consumers(self):
class TestClusterHandlers (line 271) | class TestClusterHandlers:
method test_handle_get_cluster_nodes (line 274) | def test_handle_get_cluster_nodes(self):
method test_handle_get_cluster_node_memory (line 299) | def test_handle_get_cluster_node_memory(self):
class TestUserHandlers (line 309) | class TestUserHandlers:
method test_handle_list_users (line 312) | def test_handle_list_users(self):
FILE: src/amazon-mq-mcp-server/tests/rabbitmq/test_module.py
class TestRabbitMQModule (line 6) | class TestRabbitMQModule:
method setup_method (line 9) | def setup_method(self):
method test_init (line 17) | def test_init(self):
method test_register_rabbitmq_management_tools_read_only (line 28) | def test_register_rabbitmq_management_tools_read_only(self, mock_admin...
method test_register_rabbitmq_management_tools_with_mutative (line 39) | def test_register_rabbitmq_management_tools_with_mutative(
method test_initialize_connection_success (line 52) | def test_initialize_connection_success(self, mock_admin_class, mock_co...
method test_read_only_tools_registration (line 72) | def test_read_only_tools_registration(self):
method test_mutative_tools_registration (line 81) | def test_mutative_tools_registration(self):
method test_mutative_tools_not_registered_when_disabled (line 90) | def test_mutative_tools_not_registered_when_disabled(self):
class TestRabbitMQModuleToolFunctions (line 100) | class TestRabbitMQModuleToolFunctions:
method setup_method (line 103) | def setup_method(self):
method test_list_queues_tool_registration (line 111) | def test_list_queues_tool_registration(self):
method test_mutative_tool_registration (line 120) | def test_mutative_tool_registration(self):
method test_read_only_tools_registration_count (line 129) | def test_read_only_tools_registration_count(self):
class TestRabbitMQModuleToolExecution (line 139) | class TestRabbitMQModuleToolExecution:
method setup_method (line 142) | def setup_method(self):
method test_connection_and_tool_execution (line 153) | def test_connection_and_tool_execution(self, mock_handle, mock_admin_c...
method test_read_only_tools_execution_paths (line 174) | def test_read_only_tools_execution_paths(self):
method test_mutative_tools_execution_paths (line 183) | def test_mutative_tools_execution_paths(self):
class TestRabbitMQBrokerInitializeConnection (line 193) | class TestRabbitMQBrokerInitializeConnection:
method setup_method (line 196) | def setup_method(self):
method test_rabbimq_broker_initialize_connection_success (line 214) | def test_rabbimq_broker_initialize_connection_success(self, mock_admin...
method test_rabbimq_broker_initialize_connection_failure (line 243) | def test_rabbimq_broker_initialize_connection_failure(self, mock_admin...
class TestRabbitMQBrokerInitializeConnectionWithOAuth (line 256) | class TestRabbitMQBrokerInitializeConnectionWithOAuth:
method setup_method (line 259) | def setup_method(self):
method test_rabbimq_broker_initialize_connection_with_oauth_success (line 277) | def test_rabbimq_broker_initialize_connection_with_oauth_success(
method test_rabbimq_broker_initialize_connection_with_oauth_failure (line 308) | def test_rabbimq_broker_initialize_connection_with_oauth_failure(
class TestRabbitMQBrokerListQueues (line 323) | class TestRabbitMQBrokerListQueues:
method setup_method (line 326) | def setup_method(self):
method test_rabbitmq_broker_list_queues_success (line 340) | def test_rabbitmq_broker_list_queues_success(self, mock_handle):
method test_rabbitmq_broker_list_queues_no_admin (line 351) | def test_rabbitmq_broker_list_queues_no_admin(self):
method test_rabbitmq_broker_list_queues_failure (line 359) | def test_rabbitmq_broker_list_queues_failure(self, mock_handle):
class TestRabbitMQBrokerListExchanges (line 370) | class TestRabbitMQBrokerListExchanges:
method setup_method (line 373) | def setup_method(self):
method test_rabbitmq_broker_list_exchanges_success (line 387) | def test_rabbitmq_broker_list_exchanges_success(self, mock_handle):
method test_rabbitmq_broker_list_exchanges_no_admin (line 398) | def test_rabbitmq_broker_list_exchanges_no_admin(self):
method test_rabbitmq_broker_list_exchanges_failure (line 406) | def test_rabbitmq_broker_list_exchanges_failure(self, mock_handle):
class TestRabbitMQBrokerListVhosts (line 417) | class TestRabbitMQBrokerListVhosts:
method setup_method (line 420) | def setup_method(self):
method test_rabbitmq_broker_list_vhosts_success (line 434) | def test_rabbitmq_broker_list_vhosts_success(self, mock_handle):
method test_rabbitmq_broker_list_vhosts_no_admin (line 445) | def test_rabbitmq_broker_list_vhosts_no_admin(self):
method test_rabbitmq_broker_list_vhosts_failure (line 453) | def test_rabbitmq_broker_list_vhosts_failure(self, mock_handle):
class TestRabbitMQBrokerGetQueueInfo (line 464) | class TestRabbitMQBrokerGetQueueInfo:
method setup_method (line 467) | def setup_method(self):
method test_rabbitmq_broker_get_queue_info_success (line 482) | def test_rabbitmq_broker_get_queue_info_success(self, mock_handle, moc...
method test_rabbitmq_broker_get_queue_info_no_admin (line 494) | def test_rabbitmq_broker_get_queue_info_no_admin(self):
class TestRabbitMQBrokerGetExchangeInfo (line 502) | class TestRabbitMQBrokerGetExchangeInfo:
method setup_method (line 505) | def setup_method(self):
method test_rabbitmq_broker_get_exchange_info_success (line 520) | def test_rabbitmq_broker_get_exchange_info_success(self, mock_handle, ...
method test_rabbitmq_broker_get_exchange_info_no_admin (line 532) | def test_rabbitmq_broker_get_exchange_info_no_admin(self):
class TestRabbitMQBrokerListShovels (line 540) | class TestRabbitMQBrokerListShovels:
method setup_method (line 543) | def setup_method(self):
method test_rabbitmq_broker_list_shovels_success (line 557) | def test_rabbitmq_broker_list_shovels_success(self, mock_handle):
method test_rabbitmq_broker_list_shovels_no_admin (line 568) | def test_rabbitmq_broker_list_shovels_no_admin(self):
class TestRabbitMQBrokerGetShovelInfo (line 576) | class TestRabbitMQBrokerGetShovelInfo:
method setup_method (line 579) | def setup_method(self):
method test_rabbitmq_broker_get_shovel_info_success (line 593) | def test_rabbitmq_broker_get_shovel_info_success(self, mock_handle):
method test_rabbitmq_broker_get_shovel_info_no_admin (line 604) | def test_rabbitmq_broker_get_shovel_info_no_admin(self):
class TestRabbitMQBrokerGetClusterNodesInfo (line 612) | class TestRabbitMQBrokerGetClusterNodesInfo:
method setup_method (line 615) | def setup_method(self):
method test_rabbitmq_broker_get_cluster_nodes_info_success (line 629) | def test_rabbitmq_broker_get_cluster_nodes_info_success(self, mock_han...
method test_rabbitmq_broker_get_cluster_nodes_info_no_admin (line 640) | def test_rabbitmq_broker_get_cluster_nodes_info_no_admin(self):
class TestRabbitMQBrokerListConnections (line 648) | class TestRabbitMQBrokerListConnections:
method setup_method (line 651) | def setup_method(self):
method test_rabbitmq_broker_list_connections_success (line 665) | def test_rabbitmq_broker_list_connections_success(self, mock_handle):
method test_rabbitmq_broker_list_connections_no_admin (line 676) | def test_rabbitmq_broker_list_connections_no_admin(self):
class TestRabbitMQBrokerListConsumers (line 684) | class TestRabbitMQBrokerListConsumers:
method setup_method (line 687) | def setup_method(self):
method test_rabbitmq_broker_list_consumers_success (line 701) | def test_rabbitmq_broker_list_consumers_success(self, mock_handle):
method test_rabbitmq_broker_list_consumers_no_admin (line 712) | def test_rabbitmq_broker_list_consumers_no_admin(self):
class TestRabbitMQBrokerListUsers (line 720) | class TestRabbitMQBrokerListUsers:
method setup_method (line 723) | def setup_method(self):
method test_rabbitmq_broker_list_users_success (line 737) | def test_rabbitmq_broker_list_users_success(self, mock_handle):
method test_rabbitmq_broker_list_users_no_admin (line 748) | def test_rabbitmq_broker_list_users_no_admin(self):
class TestRabbitMQBrokerIsInAlarm (line 756) | class TestRabbitMQBrokerIsInAlarm:
method setup_method (line 759) | def setup_method(self):
method test_rabbitmq_broker_is_in_alarm_success (line 773) | def test_rabbitmq_broker_is_in_alarm_success(self, mock_handle):
method test_rabbitmq_broker_is_in_alarm_no_admin (line 784) | def test_rabbitmq_broker_is_in_alarm_no_admin(self):
class TestRabbitMQBrokerIsQuorumCritical (line 792) | class TestRabbitMQBrokerIsQuorumCritical:
method setup_method (line 795) | def setup_method(self):
method test_rabbitmq_broker_is_quorum_critical_success (line 809) | def test_rabbitmq_broker_is_quorum_critical_success(self, mock_handle):
method test_rabbitmq_broker_is_quorum_critical_no_admin (line 820) | def test_rabbitmq_broker_is_quorum_critical_no_admin(self):
class TestRabbitMQBrokerDeleteQueue (line 828) | class TestRabbitMQBrokerDeleteQueue:
method setup_method (line 831) | def setup_method(self):
method test_rabbitmq_broker_delete_queue_success (line 846) | def test_rabbitmq_broker_delete_queue_success(self, mock_handle, mock_...
method test_rabbitmq_broker_delete_queue_no_admin (line 857) | def test_rabbitmq_broker_delete_queue_no_admin(self):
class TestRabbitMQBrokerPurgeQueue (line 865) | class TestRabbitMQBrokerPurgeQueue:
method setup_method (line 868) | def setup_method(self):
method test_rabbitmq_broker_purge_queue_success (line 883) | def test_rabbitmq_broker_purge_queue_success(self, mock_handle, mock_v...
method test_rabbitmq_broker_purge_queue_no_admin (line 894) | def test_rabbitmq_broker_purge_queue_no_admin(self):
class TestRabbitMQBrokerDeleteExchange (line 902) | class TestRabbitMQBrokerDeleteExchange:
method setup_method (line 905) | def setup_method(self):
method test_rabbitmq_broker_delete_exchange_success (line 920) | def test_rabbitmq_broker_delete_exchange_success(self, mock_handle, mo...
method test_rabbitmq_broker_delete_exchange_no_admin (line 931) | def test_rabbitmq_broker_delete_exchange_no_admin(self):
FILE: src/amazon-mq-mcp-server/tests/test_aws_service_mcp_generator.py
class MockClientError (line 25) | class MockClientError(Exception):
method __init__ (line 28) | def __init__(self, error_response, operation_name):
class TestAWSToolGenerator (line 35) | class TestAWSToolGenerator(unittest.TestCase):
method setUp (line 38) | def setUp(self):
method test_initialization (line 49) | def test_initialization(self, mock_session):
method test_generate (line 87) | def test_generate(self, mock_botocore_session, mock_boto3_session):
method test_get_client (line 131) | def test_get_client(self, mock_session):
method test_get_client_with_custom_aws_profile (line 171) | def test_get_client_with_custom_aws_profile(self, mock_session, mock_e...
method test_get_client_with_default_aws_profile (line 194) | def test_get_client_with_default_aws_profile(self, mock_session, mock_...
method test_create_operation_function (line 217) | def test_create_operation_function(self, mock_botocore_session, mock_b...
method test_tool_configuration_validation (line 259) | def test_tool_configuration_validation(self, mock_session):
method test_function_override (line 313) | def test_function_override(self, mock_botocore_session, mock_boto3_ses...
method test_function_override_boto3_client_getter_uses_aws_profile (line 353) | def test_function_override_boto3_client_getter_uses_aws_profile(
method test_function_override_boto3_client_getter_default_profile (line 406) | def test_function_override_boto3_client_getter_default_profile(
method test_validator (line 458) | def test_validator(self, mock_botocore_session, mock_boto3_session):
method test_client_error_handling (line 520) | def test_client_error_handling(self, mock_botocore_session, mock_boto3...
method test_get_mcp (line 584) | def test_get_mcp(self, mock_session):
method test_user_agent_config (line 595) | def test_user_agent_config(self, mock_session):
method test_skip_param_documentation (line 617) | def test_skip_param_documentation(self, mock_botocore_session, mock_bo...
method test_function_override_boto3_client_getter_service_name_parameter (line 677) | def test_function_override_boto3_client_getter_service_name_parameter(
function test_hello_world (line 729) | def test_hello_world():
FILE: src/amazon-mq-mcp-server/tests/test_server.py
class TestCreateBrokerOverride (line 34) | class TestCreateBrokerOverride:
method test_create_broker_override_function (line 37) | def test_create_broker_override_function(self):
method test_handle_create_broker (line 56) | def test_handle_create_broker(self, mock_boto3_client):
method test_handle_create_broker_without_engine_version (line 122) | def test_handle_create_broker_without_engine_version(self, mock_boto3_...
class TestCreateConfigurationOverride (line 182) | class TestCreateConfigurationOverride:
method test_create_configuration_override_function (line 185) | def test_create_configuration_override_function(self):
method test_handle_create_configuration (line 204) | def test_handle_create_configuration(self, mock_boto3_client):
class TestAllowMutativeActionOnlyOnTaggedResource (line 250) | class TestAllowMutativeActionOnlyOnTaggedResource:
method test_missing_broker_id (line 253) | def test_missing_broker_id(self):
method test_empty_broker_id (line 266) | def test_empty_broker_id(self):
method test_broker_with_mcp_tag (line 279) | def test_broker_with_mcp_tag(self):
method test_broker_without_mcp_tag (line 296) | def test_broker_without_mcp_tag(self):
method test_exception_handling (line 311) | def test_exception_handling(self):
class TestMain (line 327) | class TestMain:
method test_main_stdio (line 333) | def test_main_stdio(self, mock_parse_args, mock_mcp, mock_session):
class TestAWSToolGenerator (line 342) | class TestAWSToolGenerator:
method test_generator_configuration (line 345) | def test_generator_configuration(self):
FILE: src/amazon-neptune-mcp-server/awslabs/amazon_neptune_mcp_server/exceptions.py
class NeptuneException (line 18) | class NeptuneException(Exception):
method __init__ (line 29) | def __init__(self, exception: Union[str, Dict]):
method get_message (line 43) | def get_message(self) -> str:
method get_details (line 51) | def get_details(self) -> Any:
FILE: src/amazon-neptune-mcp-server/awslabs/amazon_neptune_mcp_server/graph_store/analytics.py
class NeptuneAnalytics (line 31) | class NeptuneAnalytics(NeptuneGraph):
method __init__ (line 47) | def __init__(
method _refresh_schema (line 82) | def _refresh_schema(self) -> GraphSchema:
method get_schema (line 126) | def get_schema(self) -> GraphSchema:
method query_opencypher (line 140) | def query_opencypher(self, query: str, params: Optional[dict] = None):
method query_gremlin (line 171) | def query_gremlin(self, query: str):
FILE: src/amazon-neptune-mcp-server/awslabs/amazon_neptune_mcp_server/graph_store/base.py
class NeptuneGraph (line 20) | class NeptuneGraph(ABC):
method get_schema (line 29) | def get_schema(self) -> GraphSchema:
method query_opencypher (line 38) | def query_opencypher(self, query: str, params: Optional[dict] = None) ...
method query_gremlin (line 51) | def query_gremlin(self, query: str) -> dict:
FILE: src/amazon-neptune-mcp-server/awslabs/amazon_neptune_mcp_server/graph_store/database.py
class NeptuneDatabase (line 31) | class NeptuneDatabase(NeptuneGraph):
method __init__ (line 51) | def __init__(
method _get_summary (line 89) | def _get_summary(self) -> Dict:
method _get_labels (line 123) | def _get_labels(self) -> Tuple[List[str], List[str]]:
method _get_triples (line 136) | def _get_triples(self, e_labels: List[str]) -> List[RelationshipPattern]:
method _get_node_properties (line 168) | def _get_node_properties(self, n_labels: List[str], types: Dict) -> List:
method _get_edge_properties (line 206) | def _get_edge_properties(self, e_labels: List[str], types: Dict[str, A...
method _refresh_schema (line 245) | def _refresh_schema(self) -> GraphSchema:
method get_schema (line 272) | def get_schema(self) -> GraphSchema:
method query_opencypher (line 286) | def query_opencypher(self, query: str, params: Optional[dict] = None):
method query_gremlin (line 306) | def query_gremlin(self, query):
FILE: src/amazon-neptune-mcp-server/awslabs/amazon_neptune_mcp_server/models.py
class Property (line 28) | class Property(BaseModel):
class Node (line 43) | class Node(BaseModel):
class Relationship (line 58) | class Relationship(BaseModel):
class RelationshipPattern (line 73) | class RelationshipPattern(BaseModel):
class GraphSchema (line 90) | class GraphSchema(BaseModel):
FILE: src/amazon-neptune-mcp-server/awslabs/amazon_neptune_mcp_server/neptune.py
class NeptuneServer (line 34) | class NeptuneServer:
method __init__ (line 47) | def __init__(self, endpoint: str, use_https: bool = True, port: int = ...
method status (line 79) | def status(self) -> str:
method schema (line 95) | def schema(self) -> GraphSchema:
method query_opencypher (line 106) | def query_opencypher(self, query: str, parameters: Optional[dict] = No...
method query_gremlin (line 121) | def query_gremlin(self, query: str) -> dict:
FILE: src/amazon-neptune-mcp-server/awslabs/amazon_neptune_mcp_server/server.py
function get_graph (line 41) | def get_graph():
function get_status_resource (line 74) | def get_status_resource() -> str:
function get_schema_resource (line 80) | def get_schema_resource() -> GraphSchema:
function get_status (line 88) | def get_status() -> str:
function get_schema (line 94) | def get_schema() -> GraphSchema:
function run_opencypher_query (line 102) | def run_opencypher_query(query: str, parameters: Optional[dict] = None) ...
function run_gremlin_query (line 108) | def run_gremlin_query(query: str) -> dict:
function main (line 113) | def main():
FILE: src/amazon-neptune-mcp-server/tests/conftest.py
function tests_setup_and_teardown (line 10) | def tests_setup_and_teardown():
function mock_boto3 (line 24) | def mock_boto3():
FILE: src/amazon-neptune-mcp-server/tests/test_analytics.py
class TestNeptuneAnalytics (line 28) | class TestNeptuneAnalytics:
method test_init_success (line 32) | async def test_init_success(self, mock_session):
method test_init_with_credentials_profile (line 64) | async def test_init_with_credentials_profile(self, mock_session):
method test_init_session_error (line 94) | async def test_init_session_error(self, mock_session):
method test_init_refresh_schema_error (line 110) | async def test_init_refresh_schema_error(self, mock_session):
method test_refresh_schema (line 134) | async def test_refresh_schema(self, mock_session):
method test_get_schema_cached (line 222) | async def test_get_schema_cached(self, mock_session):
method test_get_schema_refresh (line 249) | async def test_get_schema_refresh(self, mock_session):
method test_query_opencypher_success (line 284) | async def test_query_opencypher_success(self, mock_session):
method test_query_opencypher_with_params (line 322) | async def test_query_opencypher_with_params(self, mock_session):
method test_query_opencypher_error (line 362) | async def test_query_opencypher_error(self, mock_session):
method test_query_gremlin_not_supported (line 391) | async def test_query_gremlin_not_supported(self, mock_session):
FILE: src/amazon-neptune-mcp-server/tests/test_database.py
class TestNeptuneDatabase (line 26) | class TestNeptuneDatabase:
method test_init_success (line 30) | async def test_init_success(self, mock_session):
method test_init_with_credentials_profile (line 60) | async def test_init_with_credentials_profile(self, mock_session):
method test_init_with_http (line 93) | async def test_init_with_http(self, mock_session):
method test_init_session_error (line 119) | async def test_init_session_error(self, mock_session):
method test_init_refresh_schema_error (line 135) | async def test_init_refresh_schema_error(self, mock_session):
method test_get_summary_success (line 160) | async def test_get_summary_success(self, mock_session):
method test_get_summary_api_error (line 191) | async def test_get_summary_api_error(self, mock_session):
method test_get_summary_invalid_response (line 220) | async def test_get_summary_invalid_response(self, mock_session):
method test_get_labels (line 256) | async def test_get_labels(self, mock_session):
method test_query_opencypher_without_params (line 287) | async def test_query_opencypher_without_params(self, mock_session):
method test_query_opencypher_with_params (line 318) | async def test_query_opencypher_with_params(self, mock_session):
method test_query_opencypher_results_format (line 352) | async def test_query_opencypher_results_format(self, mock_session):
method test_query_gremlin (line 379) | async def test_query_gremlin(self, mock_session):
method test_query_gremlin_results_format (line 409) | async def test_query_gremlin_results_format(self, mock_session):
method test_get_schema_cached (line 436) | async def test_get_schema_cached(self, mock_session):
method test_get_schema_refresh (line 464) | async def test_get_schema_refresh(self, mock_session):
FILE: src/amazon-neptune-mcp-server/tests/test_exceptions.py
class TestNeptuneException (line 19) | class TestNeptuneException:
method test_init_with_string (line 22) | def test_init_with_string(self):
method test_init_with_dict_complete (line 36) | def test_init_with_dict_complete(self):
method test_init_with_dict_message_only (line 51) | def test_init_with_dict_message_only(self):
method test_init_with_dict_details_only (line 66) | def test_init_with_dict_details_only(self):
method test_init_with_empty_dict (line 81) | def test_init_with_empty_dict(self):
method test_get_message (line 95) | def test_get_message(self):
method test_get_details (line 109) | def test_get_details(self):
method test_exception_inheritance (line 124) | def test_exception_inheritance(self):
method test_exception_in_try_except (line 144) | def test_exception_in_try_except(self):
method test_complex_details (line 161) | def test_complex_details(self):
FILE: src/amazon-neptune-mcp-server/tests/test_init.py
class TestInit (line 20) | class TestInit:
method test_version (line 23) | def test_version(self):
method test_module_reload (line 40) | def test_module_reload(self):
FILE: src/amazon-neptune-mcp-server/tests/test_main.py
class TestMain (line 20) | class TestMain:
method test_main_default (line 25) | def test_main_default(self, mock_run):
method test_module_execution (line 40) | def test_module_execution(self):
FILE: src/amazon-neptune-mcp-server/tests/test_models.py
class TestModels (line 25) | class TestModels:
method test_property_model (line 28) | def test_property_model(self):
method test_node_model (line 47) | def test_node_model(self):
method test_node_model_without_properties (line 73) | def test_node_model_without_properties(self):
method test_relationship_model (line 93) | def test_relationship_model(self):
method test_relationship_model_without_properties (line 117) | def test_relationship_model_without_properties(self):
method test_relationship_pattern_model (line 137) | def test_relationship_pattern_model(self):
method test_graph_schema_model (line 159) | def test_graph_schema_model(self):
FILE: src/amazon-neptune-mcp-server/tests/test_neptune.py
class TestNeptuneServer (line 23) | class TestNeptuneServer:
method test_init_neptune_db (line 27) | async def test_init_neptune_db(self, mock_neptune_db):
method test_init_neptune_analytics (line 47) | async def test_init_neptune_analytics(self, mock_neptune_analytics):
method test_init_invalid_endpoint_format (line 66) | async def test_init_invalid_endpoint_format(self):
method test_init_empty_endpoint (line 79) | async def test_init_empty_endpoint(self):
method test_status_available (line 92) | async def test_status_available(self, mock_neptune_db):
method test_status_unavailable (line 113) | async def test_status_unavailable(self, mock_neptune_db):
method test_schema (line 135) | async def test_schema(self, mock_neptune_db):
method test_query_opencypher (line 157) | async def test_query_opencypher(self, mock_neptune_db):
method test_query_opencypher_with_parameters (line 181) | async def test_query_opencypher_with_parameters(self, mock_neptune_db):
method test_query_gremlin (line 206) | async def test_query_gremlin(self, mock_neptune_db):
FILE: src/amazon-neptune-mcp-server/tests/test_server.py
class TestServerTools (line 31) | class TestServerTools:
method test_get_status (line 35) | async def test_get_status(self, mock_get_graph):
method test_get_schema (line 55) | async def test_get_schema(self, mock_get_graph):
method test_run_opencypher_query (line 76) | async def test_run_opencypher_query(self, mock_get_graph):
method test_run_opencypher_query_with_parameters (line 97) | async def test_run_opencypher_query_with_parameters(self, mock_get_gra...
method test_run_gremlin_query (line 121) | async def test_run_gremlin_query(self, mock_get_graph):
method test_get_status_resource (line 142) | async def test_get_status_resource(self, mock_get_graph):
method test_get_schema_resource (line 162) | async def test_get_schema_resource(self, mock_get_graph):
class TestGraphInitialization (line 184) | class TestGraphInitialization:
method test_get_graph_initialization (line 189) | async def test_get_graph_initialization(self, mock_neptune_server, moc...
method test_get_graph_missing_endpoint (line 218) | async def test_get_graph_missing_endpoint(self, mock_environ_get):
method test_get_graph_with_https_false (line 241) | async def test_get_graph_with_https_false(self, mock_neptune_server, m...
class TestMainFunction (line 270) | class TestMainFunction:
method test_main_default (line 274) | async def test_main_default(self, mock_mcp):
FILE: src/amazon-qbusiness-anonymous-mcp-server/awslabs/amazon_qbusiness_anonymous_mcp_server/clients.py
function get_qbiz_client (line 25) | def get_qbiz_client() -> QBusinessClient:
function make_query (line 59) | def make_query(client: QBusinessClient, query: str) -> ChatSyncOutputTyp...
FILE: src/amazon-qbusiness-anonymous-mcp-server/awslabs/amazon_qbusiness_anonymous_mcp_server/server.py
function qbiz_local_query (line 47) | async def qbiz_local_query(
function main (line 92) | def main():
FILE: src/amazon-qbusiness-anonymous-mcp-server/tests/conftest.py
function tests_setup_and_teardown (line 9) | def tests_setup_and_teardown():
FILE: src/amazon-qbusiness-anonymous-mcp-server/tests/test_init.py
class TestInit (line 21) | class TestInit:
method test_version (line 24) | def test_version(self):
method test_module_reload (line 43) | def test_module_reload(self):
FILE: src/amazon-qbusiness-anonymous-mcp-server/tests/test_main.py
class TestMain (line 21) | class TestMain:
method test_main_default (line 26) | def test_main_default(self, mock_run):
method test_module_execution (line 35) | def test_module_execution(self):
FILE: src/amazon-qbusiness-anonymous-mcp-server/tests/test_server.py
function test_qbiz_local_query (line 22) | async def test_qbiz_local_query(mocker):
function test_qbiz_local_query1 (line 51) | async def test_qbiz_local_query1(mocker):
function test_qbiz_local_query_failure2 (line 80) | async def test_qbiz_local_query_failure2(mocker):
function test_qbiz_local_query_failure3 (line 109) | async def test_qbiz_local_query_failure3(mocker):
function test_qbiz_local_query_failure4 (line 133) | async def test_qbiz_local_query_failure4(mocker):
function test_qbiz_local_query_failure5 (line 154) | async def test_qbiz_local_query_failure5(mocker):
function test_qbiz_local_query_failure6 (line 180) | async def test_qbiz_local_query_failure6(mocker):
FILE: src/amazon-qindex-mcp-server/awslabs/amazon_qindex_mcp_server/clients.py
class QBusinessClientError (line 30) | class QBusinessClientError(Exception):
class QBusinessClient (line 36) | class QBusinessClient:
method __init__ (line 39) | def __init__(
method _get_client (line 60) | def _get_client(self) -> Boto3QBusinessClient:
method _validate_attribute_filter (line 79) | def _validate_attribute_filter(self, attribute_filter: Dict) -> None:
method _validate_content_source (line 123) | def _validate_content_source(self, content_source: Dict) -> None:
method _validate_max_results (line 144) | def _validate_max_results(self, max_results: int) -> None:
method _validate_string_safety (line 159) | def _validate_string_safety(self, value: str, param_name: str) -> None:
method _validate_required_params (line 200) | def _validate_required_params(self, application_id: str, query_text: s...
method _handle_client_error (line 222) | def _handle_client_error(self, error: ClientError, operation: str) -> ...
method search_relevant_content (line 249) | def search_relevant_content(
FILE: src/amazon-qindex-mcp-server/awslabs/amazon_qindex_mcp_server/server.py
class SearchRelevantContentResponse (line 32) | class SearchRelevantContentResponse(BaseModel):
class DocumentAttributeValue (line 44) | class DocumentAttributeValue(BaseModel):
class DocumentAttribute (line 57) | class DocumentAttribute(BaseModel):
class AttributeFilter (line 64) | class AttributeFilter(BaseModel):
class RetrieverContentSource (line 95) | class RetrieverContentSource(BaseModel):
class ContentSource (line 101) | class ContentSource(BaseModel):
function authorize_qindex (line 129) | async def authorize_qindex(
function create_token_with_iam (line 175) | async def create_token_with_iam(
function assume_role_with_identity_context (line 248) | async def assume_role_with_identity_context(
function search_relevant_content (line 313) | async def search_relevant_content(
function main (line 452) | def main():
FILE: src/amazon-qindex-mcp-server/tests/test_clients.py
class TestQBusinessClient (line 25) | class TestQBusinessClient:
method client (line 29) | def client(self):
method mock_boto3_session (line 39) | def mock_boto3_session(self):
method test_init_with_credentials (line 56) | def test_init_with_credentials(self, mock_boto3_session):
method test_init_without_credentials (line 73) | def test_init_without_credentials(self, mock_boto3_session):
method test_validate_attribute_filter_invalid_types (line 85) | def test_validate_attribute_filter_invalid_types(self, client):
method test_validate_content_source_invalid_types (line 103) | def test_validate_content_source_invalid_types(self, client):
method test_validate_max_results_invalid (line 125) | def test_validate_max_results_invalid(self, client):
method test_validate_string_safety (line 137) | def test_validate_string_safety(self, client):
method test_validate_attribute_filter_security (line 170) | def test_validate_attribute_filter_security(self, client):
method test_validate_required_params_security (line 199) | def test_validate_required_params_security(self, client):
method test_validate_required_params_invalid (line 217) | def test_validate_required_params_invalid(self, client):
method test_search_relevant_content_success (line 233) | def test_search_relevant_content_success(self, client, mock_boto3_sess...
method test_search_relevant_content_invalid_response (line 277) | def test_search_relevant_content_invalid_response(self, client, mock_b...
method test_search_relevant_content_security (line 304) | def test_search_relevant_content_security(self, client, mock_boto3_ses...
method test_search_relevant_content_client_error (line 320) | def test_search_relevant_content_client_error(self, client, mock_boto3...
method test_search_relevant_content_unexpected_error (line 357) | def test_search_relevant_content_unexpected_error(self, client, mock_b...
method test_handle_client_error_mapping (line 379) | def test_handle_client_error_mapping(self, client):
FILE: src/amazon-qindex-mcp-server/tests/test_init.py
class TestInit (line 17) | class TestInit:
method test_version (line 20) | def test_version(self):
method test_module_reload (line 37) | def test_module_reload(self):
FILE: src/amazon-qindex-mcp-server/tests/test_main.py
class TestMain (line 17) | class TestMain:
method test_main_default (line 22) | def test_main_default(self, mock_run):
method test_module_execution (line 31) | def test_module_execution(self):
FILE: src/amazon-qindex-mcp-server/tests/test_server.py
class TestMCPServer (line 29) | class TestMCPServer:
method setUp (line 32) | def setUp(self):
method test_server_initialization (line 36) | def test_server_initialization(self):
method test_tool_registration (line 44) | async def test_tool_registration(self):
class TestAuthorizeQIndex (line 56) | class TestAuthorizeQIndex:
method test_authorize_qindex_success (line 67) | async def test_authorize_qindex_success(self):
class TestCreateTokenWithIAM (line 88) | class TestCreateTokenWithIAM:
method test_create_token_with_iam_success (line 108) | async def test_create_token_with_iam_success(self, mocker):
method test_create_token_with_iam_error (line 159) | async def test_create_token_with_iam_error(self, mocker):
method test_create_token_with_iam_parameter_validation (line 172) | async def test_create_token_with_iam_parameter_validation(self, mocker):
class TestSearchRelevantContent (line 195) | class TestSearchRelevantContent:
method test_search_relevant_content_success (line 199) | async def test_search_relevant_content_success(self, mocker):
class TestServerErrorHandling (line 245) | class TestServerErrorHandling:
method test_invalid_parameters (line 249) | async def test_invalid_parameters(self):
method test_missing_credentials (line 259) | async def test_missing_credentials(self, mocker):
class TestClientConfiguration (line 283) | class TestClientConfiguration:
method test_context_initialization (line 286) | def test_context_initialization(self):
method test_context_handling (line 292) | async def test_context_handling(self, mocker):
method test_context_error_handling (line 299) | def test_context_error_handling(self):
class TestAssumeRoleWithIdentityContext (line 305) | class TestAssumeRoleWithIdentityContext:
method test_assume_role_with_identity_context_success (line 316) | async def test_assume_role_with_identity_context_success(self, mocker):
method test_assume_role_with_identity_context_error (line 351) | async def test_assume_role_with_identity_context_error(self, mocker):
class TestMainFunction (line 362) | class TestMainFunction:
method test_main (line 365) | def test_main(self, mocker):
FILE: src/amazon-sns-sqs-mcp-server/awslabs/amazon_sns_sqs_mcp_server/common.py
function validate_mcp_server_version_tag (line 24) | def validate_mcp_server_version_tag(tags: Dict[str, str]) -> Tuple[bool,...
FILE: src/amazon-sns-sqs-mcp-server/awslabs/amazon_sns_sqs_mcp_server/generator.py
class AWSToolGenerator (line 35) | class AWSToolGenerator:
method __init__ (line 38) | def __init__(
method generate (line 69) | def generate(self):
method get_mcp (line 73) | def get_mcp(self):
method __register_operations (line 77) | def __register_operations(self):
method __get_client (line 102) | def __get_client(self, region: str = 'us-east-1') -> Any:
method __get_operations (line 112) | def __get_operations(self) -> List[str]:
method __handle_function_override (line 122) | def __handle_function_override(
method __create_operation_function (line 136) | def __create_operation_function(
method __get_operation_input_parameters (line 237) | def __get_operation_input_parameters(
method __snake_to_camel (line 259) | def __snake_to_camel(self, snake_str: str) -> str:
method __validate_tool_configuration (line 263) | def __validate_tool_configuration(self):
FILE: src/amazon-sns-sqs-mcp-server/awslabs/amazon_sns_sqs_mcp_server/server.py
function main (line 31) | def main():
FILE: src/amazon-sns-sqs-mcp-server/awslabs/amazon_sns_sqs_mcp_server/sns.py
function create_topic_override (line 28) | def create_topic_override(mcp: FastMCP, sns_client_getter: BOTO3_CLIENT_...
function is_mutative_action_allowed (line 60) | def is_mutative_action_allowed(
function is_unsubscribe_allowed (line 79) | def is_unsubscribe_allowed(
function register_sns_tools (line 99) | def register_sns_tools(mcp: FastMCP, disallow_resource_creation: bool = ...
FILE: src/amazon-sns-sqs-mcp-server/awslabs/amazon_sns_sqs_mcp_server/sqs.py
function create_queue_override (line 28) | def create_queue_override(mcp: FastMCP, sqs_client_getter: BOTO3_CLIENT_...
function is_mutative_action_allowed (line 61) | def is_mutative_action_allowed(
function register_sqs_tools (line 76) | def register_sqs_tools(mcp: FastMCP, disallow_resource_creation: bool = ...
FILE: src/amazon-sns-sqs-mcp-server/print_tools.py
function print_tool_info (line 22) | async def print_tool_info(mcp):
function main (line 47) | async def main():
FILE: src/amazon-sns-sqs-mcp-server/tests/test_common.py
class TestCommonUtils (line 9) | class TestCommonUtils:
method test_validate_mcp_server_version_tag_with_tag (line 12) | def test_validate_mcp_server_version_tag_with_tag(self):
method test_validate_mcp_server_version_tag_without_tag (line 20) | def test_validate_mcp_server_version_tag_without_tag(self):
method test_validate_mcp_server_version_tag_empty_tags (line 28) | def test_validate_mcp_server_version_tag_empty_tags(self):
FILE: src/amazon-sns-sqs-mcp-server/tests/test_generator.py
class MockClientError (line 8) | class MockClientError(Exception):
method __init__ (line 11) | def __init__(self, error_response, operation_name):
class TestAWSToolGenerator (line 24) | class TestAWSToolGenerator(unittest.TestCase):
method setUp (line 27) | def setUp(self):
method test_initialization (line 38) | def test_initialization(self, mock_session):
method test_generate (line 81) | def test_generate(self, mock_botocore_session, mock_boto3_session):
method test_get_client (line 128) | def test_get_client(self, mock_session):
method test_create_operation_function (line 171) | def test_create_operation_function(self, mock_botocore_session, mock_b...
method test_tool_configuration_validation (line 215) | def test_tool_configuration_validation(self, mock_session):
method test_function_override (line 273) | def test_function_override(self, mock_botocore_session, mock_boto3_ses...
method test_validator (line 313) | def test_validator(self, mock_botocore_session, mock_boto3_session):
method test_client_error_handling (line 374) | def test_client_error_handling(self, mock_botocore_session, mock_boto3...
method test_get_mcp (line 438) | def test_get_mcp(self, mock_session):
method test_skip_param_documentation (line 453) | def test_skip_param_documentation(self, mock_botocore_session, mock_bo...
method test_boto3_client_getter (line 515) | def test_boto3_client_getter(self, mock_session):
method test_annotated_field_for_optional_params (line 542) | def test_annotated_field_for_optional_params(self, mock_botocore_sessi...
function test_hello_world (line 620) | def test_hello_world():
FILE: src/amazon-sns-sqs-mcp-server/tests/test_server.py
class TestSNSTools (line 19) | class TestSNSTools:
method test_create_topic_override (line 22) | def test_create_topic_override(self):
method test_allow_mutative_action_only_on_tagged_sns_resource (line 38) | def test_allow_mutative_action_only_on_tagged_sns_resource(self):
class TestServerModule (line 73) | class TestServerModule:
method test_mcp_initialization (line 76) | def test_mcp_initialization(self):
method test_main_without_sse (line 91) | def test_main_without_sse(self, mock_parse_args, mock_mcp, mock_session):
method test_main_with_allow_resource_creation (line 113) | def test_main_with_allow_resource_creation(
method test_main_without_allow_resource_creation (line 140) | def test_main_without_allow_resource_creation(
class TestSQSTools (line 163) | class TestSQSTools:
method test_create_queue_override (line 166) | def test_create_queue_override(self):
method test_allow_mutative_action_only_on_tagged_sqs_resource (line 182) | def test_allow_mutative_action_only_on_tagged_sqs_resource(self):
FILE: src/amazon-sns-sqs-mcp-server/tests/test_sns.py
class TestSNSTools (line 14) | class TestSNSTools:
method test_create_topic_override (line 17) | def test_create_topic_override(self):
method test_allow_mutative_action_only_on_tagged_sns_resource (line 33) | def test_allow_mutative_action_only_on_tagged_sns_resource(self):
method test_create_topic_override_implementation (line 67) | def test_create_topic_override_implementation(self):
method test_is_mutative_action_allowed_exception (line 128) | def test_is_mutative_action_allowed_exception(self):
method test_is_unsubscribe_allowed_exception (line 146) | def test_is_unsubscribe_allowed_exception(self):
method test_register_sns_tools (line 166) | def test_register_sns_tools(self, mock_aws_tool_generator, mock_boto3_...
method test_register_sns_tools_with_disallow_resource_creation (line 190) | def test_register_sns_tools_with_disallow_resource_creation(
method test_validator_with_different_operations (line 223) | def test_validator_with_different_operations(self):
method test_unsubscribe_validator (line 264) | def test_unsubscribe_validator(self):
FILE: src/amazon-sns-sqs-mcp-server/tests/test_sqs.py
class TestSQSTools (line 13) | class TestSQSTools:
method test_create_queue_override (line 16) | def test_create_queue_override(self):
method test_allow_mutative_action_only_on_tagged_sqs_resource (line 32) | def test_allow_mutative_action_only_on_tagged_sqs_resource(self):
method test_register_sqs_tools (line 66) | def test_register_sqs_tools(self, mock_aws_tool_generator, mock_boto3_...
method test_register_sqs_tools_with_disallow_resource_creation (line 86) | def test_register_sqs_tools_with_disallow_resource_creation(
method test_validator_with_different_operations (line 119) | def test_validator_with_different_operations(self):
method test_create_queue_override_implementation (line 172) | def test_create_queue_override_implementation(self):
method test_create_queue_override_with_fifo_and_custom_attributes (line 240) | def test_create_queue_override_with_fifo_and_custom_attributes(self):
method test_is_mutative_action_allowed_exception (line 293) | def test_is_mutative_action_allowed_exception(self):
FILE: src/aurora-dsql-mcp-server/awslabs/aurora_dsql_mcp_server/mutable_sql_detector.py
function detect_mutating_keywords (line 133) | def detect_mutating_keywords(sql: str) -> list[str]:
function check_sql_injection_risk (line 158) | def check_sql_injection_risk(sql: str) -> list[dict]:
function detect_transaction_bypass_attempt (line 181) | def detect_transaction_bypass_attempt(sql: str) -> bool:
FILE: src/aurora-dsql-mcp-server/awslabs/aurora_dsql_mcp_server/server.py
function readonly_query (line 140) | async def readonly_query(
function transact (line 266) | async def transact(
function get_schema (line 355) | async def get_schema(
function dsql_search_documentation (line 391) | async def dsql_search_documentation(
function dsql_read_documentation (line 416) | async def dsql_read_documentation(
function dsql_recommend (line 447) | async def dsql_recommend(
function _proxy_to_knowledge_server (line 466) | async def _proxy_to_knowledge_server(
class NoOpCtx (line 522) | class NoOpCtx:
method error (line 525) | async def error(self, message):
function get_password_token (line 533) | async def get_password_token(): # noqa: D103
function get_connection (line 542) | async def get_connection(ctx): # noqa: D103
function execute_query (line 583) | async def execute_query(ctx, conn_to_use, query: str, params=None) -> Li...
function main (line 632) | def main():
FILE: src/aurora-dsql-mcp-server/tests/test_connection_reuse.py
function reset_persistent_connection (line 11) | async def reset_persistent_connection():
function create_mock_connection (line 18) | def create_mock_connection():
function test_connection_reuse (line 32) | async def test_connection_reuse(mocker, reset_persistent_connection):
function test_connection_reuse_with_broken_connection (line 57) | async def test_connection_reuse_with_broken_connection(mocker, reset_per...
FILE: src/aurora-dsql-mcp-server/tests/test_error_paths.py
function test_readonly_query_transaction_bypass_attempt (line 10) | async def test_readonly_query_transaction_bypass_attempt():
function test_readonly_query_write_error (line 36) | async def test_readonly_query_write_error():
function test_transact_not_allowed (line 59) | async def test_transact_not_allowed():
function test_proxy_tool_timeout (line 75) | async def test_proxy_tool_timeout():
FILE: src/aurora-dsql-mcp-server/tests/test_graceful_startup.py
class MockContext (line 21) | class MockContext:
method __init__ (line 24) | def __init__(self):
method error (line 27) | async def error(self, message):
function test_readonly_query_without_cluster_config (line 32) | async def test_readonly_query_without_cluster_config():
function test_transact_without_cluster_config (line 50) | async def test_transact_without_cluster_config():
function test_get_schema_without_cluster_config (line 68) | async def test_get_schema_without_cluster_config():
FILE: src/aurora-dsql-mcp-server/tests/test_init.py
class TestInit (line 20) | class TestInit:
method test_version (line 23) | def test_version(self):
method test_module_reload (line 40) | def test_module_reload(self):
FILE: src/aurora-dsql-mcp-server/tests/test_main.py
class TestMain (line 22) | class TestMain:
method test_main_with_required_arguments (line 37) | def test_main_with_required_arguments(self, mocker):
method test_main_with_optional_arguments (line 63) | def test_main_with_optional_arguments(self, mocker):
method test_module_execution (line 72) | def test_module_execution(self):
method test_main_rejects_non_https_knowledge_server (line 111) | def test_main_rejects_non_https_knowledge_server(self):
method test_main_rejects_malformed_knowledge_server_url (line 134) | def test_main_rejects_malformed_knowledge_server_url(self):
method test_main_handles_url_parsing_exception (line 158) | def test_main_handles_url_parsing_exception(self, mock_urlparse):
method test_main_rejects_zero_timeout (line 183) | def test_main_rejects_zero_timeout(self):
method test_main_rejects_negative_timeout (line 206) | def test_main_rejects_negative_timeout(self):
method test_main_with_custom_knowledge_parameters (line 231) | def test_main_with_custom_knowledge_parameters(self, mocker):
method test_main_uses_default_knowledge_parameters (line 257) | def test_main_uses_default_knowledge_parameters(self, mocker):
method test_main_starts_without_cluster_config (line 272) | def test_main_starts_without_cluster_config(self, mocker):
method test_main_starts_with_partial_config (line 296) | def test_main_starts_with_partial_config(self, mocker):
method test_main_starts_with_invalid_cluster (line 323) | def test_main_starts_with_invalid_cluster(self, mocker):
FILE: src/aurora-dsql-mcp-server/tests/test_profile_option.py
class TestProfileOption (line 21) | class TestProfileOption:
method test_main_with_profile_argument (line 38) | def test_main_with_profile_argument(self, mocker):
method test_main_without_profile_argument (line 74) | def test_main_without_profile_argument(self, mocker):
FILE: src/aurora-dsql-mcp-server/tests/test_proxy_tools.py
function mock_ctx (line 14) | def mock_ctx():
function test_proxy_to_knowledge_server_success (line 22) | async def test_proxy_to_knowledge_server_success(mock_ctx):
function test_proxy_to_knowledge_server_uses_timeout (line 39) | async def test_proxy_to_knowledge_server_uses_timeout(mock_ctx):
function test_proxy_to_knowledge_server_error (line 67) | async def test_proxy_to_knowledge_server_error(mock_ctx):
function test_proxy_to_knowledge_server_unavailable (line 83) | async def test_proxy_to_knowledge_server_unavailable(mock_ctx):
function test_dsql_search_documentation (line 97) | async def test_dsql_search_documentation(mock_ctx):
function test_dsql_search_documentation_with_limit (line 113) | async def test_dsql_search_documentation_with_limit(mock_ctx):
function test_dsql_read_documentation (line 129) | async def test_dsql_read_documentation(mock_ctx):
function test_dsql_read_documentation_with_start_index (line 145) | async def test_dsql_read_documentation_with_start_index(mock_ctx):
function test_dsql_read_documentation_with_max_length (line 161) | async def test_dsql_read_documentation_with_max_length(mock_ctx):
function test_dsql_read_documentation_with_all_parameters (line 177) | async def test_dsql_read_documentation_with_all_parameters(mock_ctx):
function test_dsql_recommend (line 193) | async def test_dsql_recommend(mock_ctx):
function test_proxy_uses_configured_server_endpoint (line 209) | async def test_proxy_uses_configured_server_endpoint(mock_ctx):
function test_proxy_to_knowledge_server_content_text_response (line 239) | async def test_proxy_to_knowledge_server_content_text_response(mock_ctx):
function test_proxy_to_knowledge_server_content_non_text_response (line 259) | async def test_proxy_to_knowledge_server_content_non_text_response(mock_...
function test_proxy_to_knowledge_server_empty_content_response (line 279) | async def test_proxy_to_knowledge_server_empty_content_response(mock_ctx):
FILE: src/aurora-dsql-mcp-server/tests/test_readonly_enforcement.py
class TestReadonlyEnforcement (line 42) | class TestReadonlyEnforcement:
method test_detect_transaction_bypass_complex_query (line 45) | def test_detect_transaction_bypass_complex_query(self):
method test_detect_mutating_keywords_create_table (line 57) | def test_detect_mutating_keywords_create_table(self):
method test_detect_mutating_keywords_insert (line 64) | def test_detect_mutating_keywords_insert(self):
method test_detect_mutating_keywords_update (line 70) | def test_detect_mutating_keywords_update(self):
method test_detect_mutating_keywords_delete (line 76) | def test_detect_mutating_keywords_delete(self):
method test_detect_mutating_keywords_drop (line 82) | def test_detect_mutating_keywords_drop(self):
method test_safe_select_queries (line 89) | def test_safe_select_queries(self):
method test_sql_injection_patterns (line 109) | def test_sql_injection_patterns(self):
method test_transaction_bypass_variations (line 123) | def test_transaction_bypass_variations(self):
method test_permission_statements (line 135) | def test_permission_statements(self):
method test_system_statements (line 148) | def test_system_statements(self):
method test_case_insensitive_detection (line 161) | def test_case_insensitive_detection(self):
method test_postgresql_specific_patterns (line 175) | def test_postgresql_specific_patterns(self):
method test_comment_handling (line 189) | def test_comment_handling(self):
method test_empty_and_whitespace_sql_handling (line 199) | def test_empty_and_whitespace_sql_handling(self):
method test_mutating_keywords_combinations (line 253) | def test_mutating_keywords_combinations(self):
method test_transaction_bypass_edge_cases (line 277) | def test_transaction_bypass_edge_cases(self):
method test_readonly_query_blocks_mutating_keywords (line 301) | async def test_readonly_query_blocks_mutating_keywords(self):
method test_readonly_query_blocks_injection_risks (line 321) | async def test_readonly_query_blocks_injection_risks(self):
method test_readonly_query_blocks_transaction_bypass_server_level (line 349) | async def test_readonly_query_blocks_transaction_bypass_server_level(s...
method test_readonly_query_allows_safe_queries (line 379) | async def test_readonly_query_allows_safe_queries(self):
method test_readonly_query_security_checks_order (line 400) | async def test_readonly_query_security_checks_order(self):
method test_readonly_query_complex_bypass_attempt (line 410) | async def test_readonly_query_complex_bypass_attempt(self):
method test_readonly_query_case_insensitive_detection (line 419) | async def test_readonly_query_case_insensitive_detection(self):
method test_readonly_query_with_comments (line 433) | async def test_readonly_query_with_comments(self):
method test_readonly_query_postgresql_specific_patterns (line 451) | async def test_readonly_query_postgresql_specific_patterns(self):
method test_readonly_query_permission_statements (line 468) | async def test_readonly_query_permission_statements(self):
method test_readonly_query_system_statements (line 482) | async def test_readonly_query_system_statements(self):
method test_transact_allows_read_queries_in_read_only_mode (line 502) | async def test_transact_allows_read_queries_in_read_only_mode(self):
method test_transact_rejects_write_queries_in_read_only_mode (line 523) | async def test_transact_rejects_write_queries_in_read_only_mode(self):
method test_transact_rejects_mixed_queries_in_read_only_mode (line 541) | async def test_transact_rejects_mixed_queries_in_read_only_mode(self):
method test_transact_rejects_injection_in_read_only_mode (line 555) | async def test_transact_rejects_injection_in_read_only_mode(self):
method test_transact_rejects_transaction_bypass_in_read_only_mode (line 569) | async def test_transact_rejects_transaction_bypass_in_read_only_mode(s...
method test_transact_rejects_stacked_queries_in_read_only_mode (line 586) | async def test_transact_rejects_stacked_queries_in_read_only_mode(self):
method test_transact_validates_all_statements_before_execution (line 599) | async def test_transact_validates_all_statements_before_execution(self):
method test_transact_handles_readonly_sql_transaction_error (line 613) | async def test_transact_handles_readonly_sql_transaction_error(self):
method test_transact_case_insensitive_validation (line 634) | async def test_transact_case_insensitive_validation(self):
method test_transact_permission_statements_in_read_only_mode (line 648) | async def test_transact_permission_statements_in_read_only_mode(self):
method test_transact_system_statements_in_read_only_mode (line 662) | async def test_transact_system_statements_in_read_only_mode(self):
FILE: src/aurora-dsql-mcp-server/tests/test_server.py
function create_mock_connection (line 49) | def create_mock_connection():
function reset_persistent_connection (line 62) | async def reset_persistent_connection():
function test_readonly_query_throws_exception_on_empty_input (line 70) | async def test_readonly_query_throws_exception_on_empty_input():
function test_transact_throws_exception_on_empty_input (line 77) | async def test_transact_throws_exception_on_empty_input():
function test_transact_uses_read_only_transaction (line 84) | async def test_transact_uses_read_only_transaction(mocker):
function test_transact_error_on_failed_begin_read_only (line 106) | async def test_transact_error_on_failed_begin_read_only(mocker):
function test_get_schema_throws_exception_on_empty_input (line 128) | async def test_get_schema_throws_exception_on_empty_input():
function test_get_password_token_for_admin_user (line 137) | async def test_get_password_token_for_admin_user(mocker):
function test_get_password_token_for_non_admin_user (line 151) | async def test_get_password_token_for_non_admin_user(mocker):
function test_get_connection (line 164) | async def test_get_connection(mocker, reset_persistent_connection):
function test_get_connection_failure (line 191) | async def test_get_connection_failure(mocker, reset_persistent_connection):
function test_get_schema (line 202) | async def test_get_schema(mocker):
function test_get_schema_failure (line 223) | async def test_get_schema_failure(mocker):
function test_readonly_query_commit_on_success (line 243) | async def test_readonly_query_commit_on_success(mocker):
function test_readonly_query_rollback_on_failure (line 267) | async def test_readonly_query_rollback_on_failure(mocker):
function test_readonly_query_internal_error_on_failed_begin (line 290) | async def test_readonly_query_internal_error_on_failed_begin(mocker):
function test_readonly_query_error_on_write_sql (line 308) | async def test_readonly_query_error_on_write_sql(mocker):
function test_transact_commit_on_success (line 331) | async def test_transact_commit_on_success(mocker):
function test_transact_rollback_on_failure (line 360) | async def test_transact_rollback_on_failure(mocker):
function test_transact_error_on_failed_begin (line 386) | async def test_transact_error_on_failed_begin(mocker):
function test_readonly_query_rollback_error_logging (line 404) | async def test_readonly_query_rollback_error_logging(mocker):
function test_transact_rollback_error_logging (line 423) | async def test_transact_rollback_error_logging(mocker):
function test_execute_query_connection_retry (line 441) | async def test_execute_query_connection_retry(mocker):
function test_execute_query_returns_empty_on_no_rows (line 479) | async def test_execute_query_returns_empty_on_no_rows(mocker):
function test_execute_query_with_interface_error_retry (line 506) | async def test_execute_query_with_interface_error_retry(mocker):
function test_execute_query_retry_returns_empty (line 543) | async def test_execute_query_retry_returns_empty(mocker):
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/agent_scripts/manager.py
class AgentScriptsManager (line 23) | class AgentScriptsManager:
method __init__ (line 26) | def __init__(
method get_script (line 71) | def get_script(self, script_name: str) -> Script | None:
method pretty_print_scripts (line 75) | def pretty_print_scripts(self) -> str:
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/agent_scripts/models.py
class Script (line 20) | class Script(BaseModel):
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/aws/driver.py
function get_local_credentials (line 31) | def get_local_credentials(profile: str | None = None) -> Credentials:
function translate_cli_to_ir (line 49) | def translate_cli_to_ir(
function interpret_command (line 82) | def interpret_command(
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/aws/pagination.py
function _merge_page_into_result (line 25) | def _merge_page_into_result(
function _finalize_result (line 59) | def _finalize_result(
function build_result (line 81) | def build_result(
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/aws/regions.py
function get_active_regions (line 36) | def get_active_regions(profile_name: str | None = None) -> list[str]:
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/aws/service.py
function request_consent (line 52) | async def request_consent(cli_command: str, ctx: Context):
function is_operation_read_only (line 76) | def is_operation_read_only(ir: IRTranslation, read_only_operations: Read...
function check_security_policy (line 92) | def check_security_policy(
function validate (line 122) | def validate(ir: IRTranslation) -> ProgramValidationResponse:
function get_help_document (line 130) | async def get_help_document(
function execute_awscli_customization (line 148) | def execute_awscli_customization(
function interpret_command (line 188) | def interpret_command(
function _ir_metadata (line 238) | def _ir_metadata(program: InterpretedProgram | None) -> InterpretationMe...
function _to_missing_context_failures (line 250) | def _to_missing_context_failures(
function _to_validation_failures (line 262) | def _to_validation_failures(failures: list[Failure] | None) -> list[Fail...
function _to_context (line 272) | def _to_context(context: dict[str, Any] | None) -> ContextAPIModel | None:
function expand_regions_if_needed (line 286) | def expand_regions_if_needed(cli_command: str) -> list[str]:
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/aws/services.py
class ConfigResult (line 47) | class ConfigResult(NamedTuple):
function _validate_streaming_blob_path (line 57) | def _validate_streaming_blob_path(cli_argument: CLIArgument, value: Any,...
function get_awscli_driver (line 62) | def get_awscli_driver(credentials: Credentials | None = None) -> awscli....
class OperationFilters (line 80) | class OperationFilters:
method __init__ (line 83) | def __init__(self, filter_keys: Set[str], filter_set: Set[str], allows...
method filter_keys (line 90) | def filter_keys(self) -> frozenset[str]:
method allows_filter (line 94) | def allows_filter(self, filter_name: str) -> bool:
function get_operation_filters (line 154) | def get_operation_filters(operation: OperationModel) -> OperationFilters:
function extract_pagination_config (line 195) | def extract_pagination_config(
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/common/command.py
class OutputFile (line 24) | class OutputFile:
method from_operation (line 31) | def from_operation(cls, path: str, operation_model: OperationModel) ->...
class IRCommand (line 39) | class IRCommand:
method operation_python_name (line 53) | def operation_python_name(self):
method operation_cli_name (line 58) | def operation_cli_name(self):
method operation_name (line 63) | def operation_name(self):
method service_name (line 68) | def service_name(self):
method service_full_name (line 74) | def service_full_name(self):
method has_streaming_output (line 79) | def has_streaming_output(self):
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/common/command_metadata.py
class CommandMetadata (line 19) | class CommandMetadata:
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/common/config.py
class FileAccessMode (line 35) | class FileAccessMode(str, Enum):
function get_region (line 43) | def get_region(profile_name: str | None = None) -> str:
function get_server_directory (line 56) | def get_server_directory():
function get_env_bool (line 68) | def get_env_bool(env_key: str, default: bool) -> bool:
function get_file_access_mode (line 73) | def get_file_access_mode() -> FileAccessMode:
function get_transport_from_env (line 89) | def get_transport_from_env() -> Literal['stdio', 'streamable-http']:
function get_user_agent_extra (line 98) | def get_user_agent_extra() -> str:
function get_working_directory (line 119) | def get_working_directory() -> Path:
function get_server_auth (line 141) | def get_server_auth():
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/common/errors.py
class Failure (line 29) | class Failure:
class AwsApiMcpError (line 36) | class AwsApiMcpError(Exception):
method as_failure (line 39) | def as_failure(self) -> Failure:
class CliParsingError (line 44) | class CliParsingError(AwsApiMcpError):
class CommandValidationError (line 48) | class CommandValidationError(AwsApiMcpError):
class MissingContextError (line 57) | class MissingContextError(AwsApiMcpError):
method __init__ (line 60) | def __init__(self, message: str, command_metadata: CommandMetadata) ->...
class ProhibitedOperatorsError (line 66) | class ProhibitedOperatorsError(CliParsingError):
method __init__ (line 71) | def __init__(self, operators: list[str]):
method as_failure (line 77) | def as_failure(self) -> Failure:
class InvalidChoiceForParameterError (line 82) | class InvalidChoiceForParameterError(CliParsingError):
method __init__ (line 87) | def __init__(self, parameter: str, choice: str):
method as_failure (line 94) | def as_failure(self) -> Failure:
class ServiceNotAllowedError (line 101) | class ServiceNotAllowedError(CliParsingError):
method __init__ (line 106) | def __init__(self, service: str):
method as_failure (line 112) | def as_failure(self) -> Failure:
class OperationNotAllowedError (line 117) | class OperationNotAllowedError(CliParsingError):
method __init__ (line 122) | def __init__(self, service: str, operation: str):
method as_failure (line 129) | def as_failure(self) -> Failure:
class InvalidServiceError (line 136) | class InvalidServiceError(CliParsingError):
method __init__ (line 141) | def __init__(self, service: str):
method as_failure (line 147) | def as_failure(self) -> Failure:
class MissingOperationError (line 152) | class MissingOperationError(CliParsingError):
method __init__ (line 160) | def __init__(self):
method as_failure (line 164) | def as_failure(self) -> Failure:
class InvalidServiceOperationError (line 169) | class InvalidServiceOperationError(CliParsingError):
method __init__ (line 174) | def __init__(self, service: str, operation: str):
method as_failure (line 181) | def as_failure(self) -> Failure:
class InvalidParametersReceivedError (line 188) | class InvalidParametersReceivedError(CommandValidationError):
method __init__ (line 197) | def __init__(
method as_failure (line 217) | def as_failure(self) -> Failure:
class MissingRequiredParametersError (line 230) | class MissingRequiredParametersError(MissingContextError):
method __init__ (line 238) | def __init__(
method as_failure (line 254) | def as_failure(self) -> Failure:
class MisspelledParametersError (line 266) | class MisspelledParametersError(CommandValidationError):
method __init__ (line 274) | def __init__(
method as_failure (line 288) | def as_failure(self) -> Failure:
class UnknownArgumentsError (line 299) | class UnknownArgumentsError(CommandValidationError):
method __init__ (line 308) | def __init__(
method as_failure (line 325) | def as_failure(self) -> Failure:
class DeniedGlobalArgumentsError (line 337) | class DeniedGlobalArgumentsError(CommandValidationError):
method __init__ (line 342) | def __init__(self, service: str, args: list[str]):
method as_failure (line 349) | def as_failure(self) -> Failure:
class UnknownFiltersError (line 360) | class UnknownFiltersError(CommandValidationError):
method __init__ (line 365) | def __init__(self, service: str, filters: list[str]):
method as_failure (line 372) | def as_failure(self) -> Failure:
class UnsupportedFilterError (line 383) | class UnsupportedFilterError(CommandValidationError):
method __init__ (line 388) | def __init__(self, service: str, operation: str, keys: Set[str]):
method as_failure (line 396) | def as_failure(self) -> Failure:
class MalformedFilterError (line 408) | class MalformedFilterError(CommandValidationError):
method __init__ (line 413) | def __init__(self, service: str, operation: str, keys: Set[str], expec...
method as_failure (line 422) | def as_failure(self) -> Failure:
class InvalidTypeForParameterError (line 435) | class InvalidTypeForParameterError(CommandValidationError):
method __init__ (line 440) | def __init__(self, parameter: str, param_type: Callable[[str], Any] | ...
method as_failure (line 447) | def as_failure(self) -> Failure:
class ExpectedArgumentError (line 454) | class ExpectedArgumentError(MissingContextError):
method __init__ (line 459) | def __init__(self, parameter: str, msg: str, command_metadata: Command...
method as_failure (line 466) | def as_failure(self) -> Failure:
class ShortHandParserError (line 471) | class ShortHandParserError(CommandValidationError):
method __init__ (line 476) | def __init__(self, parameter: str, msg: str):
method as_failure (line 483) | def as_failure(self) -> Failure:
class ParameterValidationErrorRecord (line 489) | class ParameterValidationErrorRecord:
method format_message (line 495) | def format_message(self):
class ParameterSchemaValidationError (line 500) | class ParameterSchemaValidationError(CommandValidationError):
method __init__ (line 503) | def __init__(self, errors: Iterable[ParameterValidationErrorRecord]):
method as_failure (line 509) | def as_failure(self) -> Failure:
class RequestSerializationError (line 514) | class RequestSerializationError(CommandValidationError):
method __init__ (line 519) | def __init__(self, service: str, operation: str, msg: str):
method as_failure (line 527) | def as_failure(self) -> Failure:
class ClientSideFilterError (line 535) | class ClientSideFilterError(CommandValidationError):
method __init__ (line 540) | def __init__(self, service: str, operation: str, client_side_query: st...
method as_failure (line 549) | def as_failure(self) -> Failure:
class FilePathValidationError (line 562) | class FilePathValidationError(CommandValidationError):
method __init__ (line 571) | def __init__(self, file_path: str, reason: str):
method as_failure (line 578) | def as_failure(self) -> Failure:
class LocalFileAccessDisabledError (line 589) | class LocalFileAccessDisabledError(FilePathValidationError):
method __init__ (line 594) | def __init__(self, file_path: str):
class FileParameterError (line 600) | class FileParameterError(CommandValidationError):
method __init__ (line 605) | def __init__(self, service: str, operation: str, file_path: str, reaso...
method as_failure (line 616) | def as_failure(self) -> Failure:
class OperationIsNotSupportedInTheRegionError (line 629) | class OperationIsNotSupportedInTheRegionError(CommandValidationError):
method __init__ (line 634) | def __init__(self, service: str, operation: str, region: str):
method as_failure (line 642) | def as_failure(self) -> Failure:
class AwsRegionResolutionError (line 654) | class AwsRegionResolutionError(AwsApiMcpError):
method __init__ (line 670) | def __init__(self, reason: str, profile_name: str | None = None):
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/common/file_system_controls.py
function is_streaming_blob_argument (line 110) | def is_streaming_blob_argument(cli_argument: CLIArgument) -> bool:
function get_file_validated (line 116) | def get_file_validated(prefix, path, mode):
function validate_file_path (line 124) | def validate_file_path(file_path: str) -> str:
function extract_file_paths_from_parameters (line 167) | def extract_file_paths_from_parameters(
function _is_remote_path (line 233) | def _is_remote_path(path: str) -> bool:
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/common/help_command.py
function _clean_text (line 27) | def _clean_text(text: str) -> str:
function _clean_description (line 32) | def _clean_description(description: str) -> str:
function generate_help_document (line 38) | def generate_help_document(service_name: str, operation_name: str) -> di...
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/common/helpers.py
function operation_timer (line 31) | def operation_timer(service: str, operation: str, region: str):
class Boto3Encoder (line 46) | class Boto3Encoder(json.JSONEncoder):
method _decode_bytes (line 49) | def _decode_bytes(self, data: bytes) -> str:
method default (line 56) | def default(self, o):
function as_json (line 70) | def as_json(boto_response: dict[str, Any]) -> str:
function expand_user_home_directory (line 75) | def expand_user_home_directory(args: list[str]) -> list[str]:
function is_help_operation (line 80) | def is_help_operation(args: list[Any]) -> bool:
function validate_aws_region (line 85) | def validate_aws_region(region: str):
function get_requests_session (line 95) | def get_requests_session() -> requests.Session:
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/common/models.py
class ProgramValidationRequest (line 23) | class ProgramValidationRequest(BaseModel):
class Context (line 30) | class Context(BaseModel):
class ValidationFailure (line 41) | class ValidationFailure(BaseModel):
class InterpretationMetadata (line 48) | class InterpretationMetadata(BaseModel):
class ProgramValidationResponse (line 57) | class ProgramValidationResponse(BaseModel):
method validation_failed (line 64) | def validation_failed(self) -> bool:
class Credentials (line 74) | class Credentials(BaseModel):
class InterpretationResponse (line 85) | class InterpretationResponse(BaseModel):
class AwsCliAliasResponse (line 104) | class AwsCliAliasResponse(BaseModel):
class ProgramInterpretationResponse (line 111) | class ProgramInterpretationResponse(BaseModel):
class Consent (line 121) | class Consent(BaseModel):
class IRTranslation (line 128) | class IRTranslation:
method validation_or_translation_failures (line 160) | def validation_or_translation_failures(self) -> list[Failure] | None:
method __eq__ (line 166) | def __eq__(self, other):
class InterpretedProgram (line 178) | class InterpretedProgram:
method as_dict (line 205) | def as_dict(self) -> dict[str, Any]:
function _normalize_program (line 210) | def _normalize_program(str) -> list[str]:
class CallAWSResponse (line 214) | class CallAWSResponse(BaseModel):
method check_response_or_error (line 222) | def check_response_or_error(self) -> 'CallAWSResponse':
method serialize_model (line 229) | def serialize_model(self) -> dict:
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/metadata/read_only_operations_list.py
class ServiceReferenceUrlsByService (line 47) | class ServiceReferenceUrlsByService(dict):
method __init__ (line 50) | def __init__(self):
class ReadOnlyOperations (line 62) | class ReadOnlyOperations(dict):
method __init__ (line 65) | def __init__(self, service_reference_urls_by_service: dict[str, str]):
method has (line 79) | def has(self, service, operation) -> bool:
method _cache_ready_only_operations_for_service (line 95) | def _cache_ready_only_operations_for_service(self, service: str):
method _get_known_readonly_operations_from_metadata (line 108) | def _get_known_readonly_operations_from_metadata(self) -> dict[str, Li...
method _get_custom_readonly_operations (line 124) | def _get_custom_readonly_operations() -> dict[str, List[str]]:
function get_read_only_operations (line 143) | def get_read_only_operations() -> ReadOnlyOperations:
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/parser/custom_validators/botocore_param_validator.py
function pattern_check (line 20) | def pattern_check(name, value, shape, error_type, errors):
class BotoCoreValidationErrors (line 30) | class BotoCoreValidationErrors(ValidationErrors):
method _format_error (line 33) | def _format_error(self, error):
class BotoCoreParamValidator (line 52) | class BotoCoreParamValidator(ParamValidator):
method validate (line 55) | def validate(self, params, shape):
method _validate_string (line 62) | def _validate_string(self, param, shape, errors, name):
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/parser/custom_validators/ec2_validator.py
function validate_ec2_parameter_values (line 64) | def validate_ec2_parameter_values(parameters: dict[str, Any]):
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/parser/custom_validators/s3_express_one_validator.py
function validate_s3_express_one_region (line 34) | def validate_s3_express_one_region(service: str, operation: str, region:...
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/parser/custom_validators/ssm_validator.py
function _get_platform_name_and_platform_version (line 45) | def _get_platform_name_and_platform_version(string: str) -> Iterable[tup...
function _validate_platform_name_used_correctly (line 56) | def _validate_platform_name_used_correctly(
function _validate_platform_type_used_correctly (line 121) | def _validate_platform_type_used_correctly(
function _validate_filters (line 174) | def _validate_filters(filters: list[dict[str, Any]]):
function _validate_syncname (line 195) | def _validate_syncname(parameters, filters):
function perform_ssm_validations (line 219) | def perform_ssm_validations(operation: str, parameters: dict[str, Any]):
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/parser/interpretation.py
function interpret (line 39) | def interpret(
function _handle_streaming_output (line 98) | def _handle_streaming_output(response: dict[str, Any], output_file: Outp...
function _apply_filter (line 112) | def _apply_filter(response: dict[str, Any], client_side_filter: ParsedRe...
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/parser/lexer.py
function split_cli_command (line 38) | def split_cli_command(cli_command: str) -> list[str]:
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/parser/parser.py
class ParsedOperationArgs (line 176) | class ParsedOperationArgs(NamedTuple):
function _on_error_in_argparse (line 187) | def _on_error_in_argparse(message: str):
class ArgTableParser (line 191) | class ArgTableParser(ArgTableArgParser):
method parse_operation_args (line 194) | def parse_operation_args(self, command_metadata: CommandMetadata, args...
method _check_if_misspelled (line 220) | def _check_if_misspelled(self, service, operation, supported_args, unk...
method error (line 233) | def error(self, message): # type: ignore[override]
method _identify_missing_parameters (line 238) | def _identify_missing_parameters(self, operation_args: Namespace) -> G...
method _get_value (line 266) | def _get_value(self, action, arg_string):
method _match_argument (line 272) | def _match_argument(self, action, arg_strings_pattern):
function _fetch_error_from_number_of_args (line 282) | def _fetch_error_from_number_of_args(nargs: str) -> str:
class GlobalArgParser (line 286) | class GlobalArgParser(MainArgParser):
method _check_value (line 289) | def _check_value(self, action, value):
method _build (line 302) | def _build(self, command_table, version_string, argument_table): # no...
method get_parser (line 310) | def get_parser():
method error (line 320) | def error(self, message): # type: ignore[override]
function is_custom_operation (line 325) | def is_custom_operation(service, operation):
function is_denied_custom_service (line 344) | def is_denied_custom_service(service):
function is_denied_custom_operation (line 349) | def is_denied_custom_operation(service, operation):
function parse (line 375) | def parse(cli_command: str, default_region_override: str | None = None) ...
function _handle_service_command (line 396) | def _handle_service_command(
function _handle_awscli_customization (line 476) | def _handle_awscli_customization(
function contains_subcommand (line 519) | def contains_subcommand(operation_command, remaining: list[str]) -> bool:
function _parse_customization_parameters (line 529) | def _parse_customization_parameters(
function _validate_customization_arguments (line 554) | def _validate_customization_arguments(
function _handle_invalid_parameters (line 627) | def _handle_invalid_parameters(
function _validate_global_args (line 660) | def _validate_global_args(service: str, global_args: argparse.Namespace):
function _validate_parameters (line 672) | def _validate_parameters(
function _run_custom_validations (line 703) | def _run_custom_validations(
function _validate_request_serialization (line 715) | def _validate_request_serialization(
function _validate_s3_file_paths (line 736) | def _validate_s3_file_paths(service: str, operation: str, parameters: di...
function _validate_s3_file_path (line 749) | def _validate_s3_file_path(
function _validate_customization_file_paths (line 769) | def _validate_customization_file_paths(
function _validate_outfile (line 798) | def _validate_outfile(
function _validate_file_path (line 814) | def _validate_file_path(file_path: str, service: str, operation: str):
function _validate_endpoint (line 826) | def _validate_endpoint(endpoint: str | None):
function _fetch_region_from_arn (line 851) | def _fetch_region_from_arn(parameters: dict[str, Any]) -> str | None:
function _construct_command (line 860) | def _construct_command(
function _service_full_name (line 918) | def _service_full_name(service_model: ServiceModel) -> str | None:
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/security/policy.py
class PolicyDecision (line 24) | class PolicyDecision(Enum):
function check_elicitation_support (line 32) | def check_elicitation_support(ctx) -> bool:
class SecurityPolicy (line 42) | class SecurityPolicy:
method __init__ (line 45) | def __init__(self, ctx=None):
method _load_policy (line 56) | def _load_policy(self):
method _load_customizations (line 89) | def _load_customizations(self):
method determine_policy_effect (line 109) | def determine_policy_effect(
method check_customization (line 141) | def check_customization(self, ir, is_read_only_func) -> Optional[Polic...
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/middleware/http_header_validation_middleware.py
class HTTPHeaderValidationMiddleware (line 23) | class HTTPHeaderValidationMiddleware(Middleware):
method on_request (line 26) | async def on_request(
FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/server.py
function suggest_aws_commands (line 146) | async def suggest_aws_commands(
function call_aws (line 243) | async def call_aws(
function _execute_single_command (line 274) | async def _execute_single_command(
function call_aws_helper (line 284) | async def call_aws_helper(
function get_execution_plan (line 403) | async def get_execution_plan(
function main (line 425) | def main():
FILE: src/aws-api-mcp-server/tests/agent_scripts/test_manager.py
function test_registry_dir (line 10) | def test_registry_dir():
function test_get_script_existing (line 15) | def test_get_script_existing(test_registry_dir):
function test_get_script_another_valid (line 26) | def test_get_script_another_valid(test_registry_dir):
function test_initialization_with_valid_scripts (line 37) | def test_initialization_with_valid_scripts(test_registry_dir):
function test_initialization_with_non_existent_directory (line 47) | def test_initialization_with_non_existent_directory():
function test_initialization_with_empty_directory (line 55) | def test_initialization_with_empty_directory():
function test_initialization_with_script_missing_description (line 63) | def test_initialization_with_script_missing_description():
function test_initialization_with_malformed_frontmatter (line 81) | def test_initialization_with_malformed_frontmatter():
function test_script_name_extraction (line 100) | def test_script_name_extraction(test_registry_dir):
function test_script_content_parsing (line 109) | def test_script_content_parsing(test_registry_dir):
function test_pretty_print_scripts (line 123) | def test_pretty_print_scripts(test_registry_dir):
function test_pretty_print_scripts_empty (line 136) | def test_pretty_print_scripts_empty(test_registry_dir):
function test_pretty_print_scripts_single (line 147) | def test_pretty_print_scripts_single(test_registry_dir):
function test_manager_scripts_property (line 165) | def test_manager_scripts_property(test_registry_dir):
function test_script_with_complex_content (line 179) | def test_script_with_complex_content(test_registry_dir):
function test_script_with_multiline_description (line 191) | def test_script_with_multiline_description():
function test_script_with_special_characters_in_name (line 217) | def test_script_with_special_characters_in_name():
function test_custom_scripts_dir_valid (line 237) | def test_custom_scripts_dir_valid():
function test_custom_scripts_dir_nonexistent (line 273) | def test_custom_scripts_dir_nonexistent():
function test_custom_scripts_dir_no_read_permission (line 286) | def test_custom_scripts_dir_no_read_permission():
function test_custom_scripts_dir_none (line 301) | def test_custom_scripts_dir_none():
FILE: src/aws-api-mcp-server/tests/aws/test_driver.py
function test_get_local_credentials_success_with_aws_mcp_profile (line 28) | def test_get_local_credentials_success_with_aws_mcp_profile(mock_session...
function test_get_local_credentials_success_with_default_creds (line 51) | def test_get_local_credentials_success_with_default_creds(mock_session_c...
function test_get_local_credentials_raises_no_credentials_error (line 74) | def test_get_local_credentials_raises_no_credentials_error(mock_session_...
function test_driver (line 281) | def test_driver(command, program):
function test_invalid_region (line 304) | def test_invalid_region(command):
function test_interpret_command_with_credentials_parameter (line 311) | def test_interpret_command_with_credentials_parameter(mock_get_local_cre...
function test_interpret_command_without_credentials_parameter (line 328) | def test_interpret_command_without_credentials_parameter(mock_get_local_...
function test_interpret_command_credentials_precedence (line 344) | def test_interpret_command_credentials_precedence(mock_get_local_credent...
FILE: src/aws-api-mcp-server/tests/aws/test_pagination.py
function get_pages (line 6) | def get_pages():
function test_build_result (line 48) | def test_build_result():
function test_build_result_with_client_side_filter (line 75) | def test_build_result_with_client_side_filter():
function test_build_result_with_max_results (line 100) | def test_build_result_with_max_results():
FILE: src/aws-api-mcp-server/tests/aws/test_regions.py
function test_get_active_regions_with_profile (line 9) | def test_get_active_regions_with_profile(mock_session):
function test_get_active_regions_without_profile (line 34) | def test_get_active_regions_without_profile(mock_session):
function test_get_active_regions_multiple_pages (line 56) | def test_get_active_regions_multiple_pages(mock_session):
function test_get_active_regions_empty_response (line 83) | def test_get_active_regions_empty_response(mock_session):
function test_get_active_regions_access_denied_error (line 98) | def test_get_active_regions_access_denied_error(mock_session):
function test_get_active_regions_other_client_error (line 116) | def test_get_active_regions_other_client_error(mock_session):
function test_get_active_regions_unexpected_error (line 134) | def test_get_active_regions_unexpected_error(mock_session):
FILE: src/aws-api-mcp-server/tests/aws/test_service.py
function test_interpret_returns_validation_failures (line 62) | def test_interpret_returns_validation_failures(cli_command, reason, serv...
function test_interpret_returns_missing_context_failures (line 83) | def test_interpret_returns_missing_context_failures():
function test_interpret_returns_valid_response (line 211) | def test_interpret_returns_valid_response(
function test_interpret_injects_region (line 235) | def test_interpret_injects_region(mock_get_region):
function test_region_picked_up_from_arn (line 285) | def test_region_picked_up_from_arn(cli, region):
function test_validate_success (line 298) | def test_validate_success():
function test_validate_returns_validation_failures (line 313) | def test_validate_returns_validation_failures(cli_command, validate_resp...
function test_validate_returns_missing_context_failures (line 321) | def test_validate_returns_missing_context_failures():
function test_validate_returns_ec2_validation_failures (line 369) | def test_validate_returns_ec2_validation_failures(cli_command, validatio...
function test_is_operation_read_only_returns_true_for_read_only_operation (line 379) | def test_is_operation_read_only_returns_true_for_read_only_operation():
function test_is_operation_read_only_returns_false_for_non_read_only_operation (line 397) | def test_is_operation_read_only_returns_false_for_non_read_only_operatio...
function test_is_operation_read_only_returns_false_for_unknown_service (line 415) | def test_is_operation_read_only_returns_false_for_unknown_service():
function test_is_operation_read_only_raises_error_for_missing_command_metadata (line 433) | def test_is_operation_read_only_raises_error_for_missing_command_metadat...
function test_is_operation_read_only_raises_error_for_missing_service_name (line 442) | def test_is_operation_read_only_raises_error_for_missing_service_name():
function test_is_operation_read_only_raises_error_for_missing_operation_name (line 457) | def test_is_operation_read_only_raises_error_for_missing_operation_name():
function test_execute_awscli_customization_success (line 471) | def test_execute_awscli_customization_success(mock_get_driver):
function test_execute_awscli_customization_error (line 497) | def test_execute_awscli_customization_error(mock_get_driver):
function test_profile_not_added_when_env_var_none (line 520) | def test_profile_not_added_when_env_var_none(mock_get_driver):
function test_profile_added_when_env_var_set (line 538) | def test_profile_added_when_env_var_set(mock_get_driver):
function test_profile_not_added_if_present_for_customizations (line 558) | def test_profile_not_added_if_present_for_customizations(mock_get_region...
function test_interpret_command_creates_output_file_for_streaming_operations (line 590) | def test_interpret_command_creates_output_file_for_streaming_operations(
function test_interpret_command_with_credentials_parameter (line 620) | def test_interpret_command_with_credentials_parameter():
function test_interpret_command_without_credentials_parameter (line 637) | def test_interpret_command_without_credentials_parameter():
function test_interpret_command_with_region_parameter (line 653) | def test_interpret_command_with_region_parameter(mock_interpret):
function test_execute_awscli_customization_uses_explicit_region_overrides_ir (line 675) | def test_execute_awscli_customization_uses_explicit_region_overrides_ir(...
function test_execute_awscli_customization_with_credentials (line 713) | def test_execute_awscli_customization_with_credentials(mock_get_driver):
function test_execute_awscli_customization_without_credentials (line 746) | def test_execute_awscli_customization_without_credentials(mock_get_driver):
function test_execute_awscli_customization_raises_error (line 777) | def test_execute_awscli_customization_raises_error(mock_get_driver):
function test_expand_regions_if_needed_without_expansion (line 819) | def test_expand_regions_if_needed_without_expansion(command):
function test_expand_regions_if_needed_with_invalid_region (line 834) | def test_expand_regions_if_needed_with_invalid_region(command):
function test_expand_regions_if_needed_wildcard (line 866) | def test_expand_regions_if_needed_wildcard(mock_get_active_regions, comm...
function test_expand_regions_if_needed_with_api_mcp_profile_name (line 875) | def test_expand_regions_if_needed_with_api_mcp_profile_name(mock_get_act...
function test_expand_regions_if_needed_with_profile (line 895) | def test_expand_regions_if_needed_with_profile(mock_get_active_regions, ...
function test_expand_regions_if_needed_get_regions_fails (line 903) | def test_expand_regions_if_needed_get_regions_fails(mock_get_active_regi...
FILE: src/aws-api-mcp-server/tests/aws/test_services.py
function test_max_results (line 23) | def test_max_results(max_result_config, max_result_param, expected_max_r...
function test_session_user_agent_in_boto_request (line 37) | def test_session_user_agent_in_boto_request(mock_send, mock_env):
function test_get_awscli_driver_with_credentials (line 66) | def test_get_awscli_driver_with_credentials(mock_create_driver):
function test_get_awscli_driver_without_credentials (line 86) | def test_get_awscli_driver_without_credentials(mock_create_driver):
function test_get_awscli_driver_user_agent_configuration (line 100) | def test_get_awscli_driver_user_agent_configuration(mock_create_driver):
FILE: src/aws-api-mcp-server/tests/common/test_command.py
function test_operation_cli_name (line 19) | def test_operation_cli_name():
function test_operation_cli_name_ec2 (line 31) | def test_operation_cli_name_ec2():
function test_operation_cli_name_with_s3 (line 43) | def test_operation_cli_name_with_s3():
FILE: src/aws-api-mcp-server/tests/common/test_config.py
function test_get_server_directory_windows_macos (line 27) | def test_get_server_directory_windows_macos(
function test_get_region_parametrized (line 68) | def test_get_region_parametrized(
function test_get_transport_from_env_default_value (line 97) | def test_get_transport_from_env_default_value(monkeypatch):
function test_get_transport_from_env_invalid_values (line 120) | def test_get_transport_from_env_invalid_values(monkeypatch, invalid_tran...
function test_get_transport_from_env_streamable_http_with_no_auth (line 128) | def test_get_transport_from_env_streamable_http_with_no_auth(monkeypatch):
function test_user_agent_without_telemetry (line 137) | def test_user_agent_without_telemetry():
function test_user_agent_with_context (line 147) | def test_user_agent_with_context(mock_get_context):
function test_user_agent_with_context_no_client_params (line 167) | def test_user_agent_with_context_no_client_params(mock_get_context):
function test_package_version_in_user_agent (line 186) | def test_package_version_in_user_agent():
function test_get_file_access_mode_unrestricted (line 205) | def test_get_file_access_mode_unrestricted(monkeypatch, env_value, expec...
function test_get_file_access_mode_workdir (line 225) | def test_get_file_access_mode_workdir(monkeypatch, env_value, expected_m...
function test_get_file_access_mode_no_access (line 240) | def test_get_file_access_mode_no_access(monkeypatch, env_value, expected...
function test_get_file_access_mode_default (line 247) | def test_get_file_access_mode_default(monkeypatch):
function test_get_file_access_mode_unknown_defaults_to_workdir (line 264) | def test_get_file_access_mode_unknown_defaults_to_workdir(monkeypatch, e...
function test_get_working_directory_default (line 273) | def test_get_working_directory_default(mock_makedirs, mock_get_server_di...
function test_get_working_directory_custom_valid_path (line 293) | def test_get_working_directory_custom_valid_path(
function test_get_working_directory_path_does_not_exist (line 315) | def test_get_working_directory_path_does_not_exist(
function test_get_working_directory_path_is_not_directory (line 336) | def test_get_working_directory_path_is_not_directory(
function test_get_working_directory_path_is_relative (line 357) | def test_get_working_directory_path_is_relative(mock_exists, mock_isdir,...
FILE: src/aws-api-mcp-server/tests/common/test_file_system_controls.py
function test_safe_path_allowed (line 29) | def test_safe_path_allowed():
function test_unsafe_path_blocked (line 36) | def test_unsafe_path_blocked():
function test_unrestricted_access_allows_unsafe_path (line 47) | def test_unrestricted_access_allows_unsafe_path():
function test_all_custom_operations_have_file_path_arguments_entry (line 54) | def test_all_custom_operations_have_file_path_arguments_entry():
function test_extract_file_paths_service_non_custom_operation (line 90) | def test_extract_file_paths_service_non_custom_operation():
function test_extract_file_paths_param_value_is_list (line 106) | def test_extract_file_paths_param_value_is_list():
function test_extract_file_paths_parameter_none_value (line 127) | def test_extract_file_paths_parameter_none_value():
FILE: src/aws-api-mcp-server/tests/common/test_help_command.py
class MockDoc (line 10) | class MockDoc:
method __init__ (line 13) | def __init__(self, content=b''):
method getvalue (line 17) | def getvalue(self):
function test_clean_text (line 22) | def test_clean_text():
function test_clean_description (line 28) | def test_clean_description():
function test_generate_help_document_unknown_command (line 38) | def test_generate_help_document_unknown_command(mock_driver):
function test_generate_help_document_real_aws_commands (line 77) | def test_generate_help_document_real_aws_commands(
FILE: src/aws-api-mcp-server/tests/common/test_helpers.py
function test_validate_aws_region_valid_regions (line 61) | def test_validate_aws_region_valid_regions(valid_region: str):
function test_validate_aws_region_invalid_regions (line 86) | def test_validate_aws_region_invalid_regions(mock_logger: MagicMock, inv...
function test_get_requests_session (line 100) | def test_get_requests_session():
function test_is_help_operation (line 146) | def test_is_help_operation(args, expected):
function test_as_json_basic_dict (line 151) | def test_as_json_basic_dict():
function test_as_json_encodes_streaming_body_with_utf8_content (line 158) | def test_as_json_encodes_streaming_body_with_utf8_content():
function test_as_json_encodes_streaming_body_with_non_utf8_content (line 166) | def test_as_json_encodes_streaming_body_with_non_utf8_content():
function test_as_json_encodes_bytes_with_utf8_content (line 176) | def test_as_json_encodes_bytes_with_utf8_content():
function test_as_json_encodes_bytes_with_non_utf8_content (line 183) | def test_as_json_encodes_bytes_with_non_utf8_content():
function test_as_json_raises_type_error_for_unsupported_type (line 192) | def test_as_json_raises_type_error_for_unsupported_type():
FILE: src/aws-api-mcp-server/tests/common/test_models.py
function test_call_aws_response_with_response (line 10) | def test_call_aws_response_with_response():
function test_call_aws_response_with_error (line 23) | def test_call_aws_response_with_error():
function test_call_aws_response_with_both (line 32) | def test_call_aws_response_with_both():
function test_call_aws_response_validation_error (line 44) | def test_call_aws_response_validation_error():
function test_call_aws_response_serialization_with_response (line 50) | def test_call_aws_response_serialization_with_response():
function test_call_aws_response_serialization_with_error (line 64) | def test_call_aws_response_serialization_with_error():
FILE: src/aws-api-mcp-server/tests/fixtures.py
class MockStreamingBody (line 194) | class MockStreamingBody:
method __init__ (line 197) | def __init__(self, content):
method iter_chunks (line 201) | def iter_chunks(self, chunk_size=1024):
method read (line 205) | def read(self):
function raise_ (line 221) | def raise_(ex):
function mock_make_api_call (line 239) | def mock_make_api_call(self, operation_name, kwarg):
function create_file_open_mock (line 257) | def create_file_open_mock(*target_files):
function patch_boto3 (line 274) | def patch_boto3():
function patch_botocore (line 285) | def patch_botocore():
class DummyCtx (line 296) | class DummyCtx(Context):
method __init__ (line 299) | def __init__(self):
method error (line 303) | async def error(self, message, logger_name=None, extra=None):
FILE: src/aws-api-mcp-server/tests/history_handler.py
class Boto3HistoryHandler (line 4) | class Boto3HistoryHandler:
method __init__ (line 7) | def __init__(self):
method emit (line 11) | def emit(
FILE: src/aws-api-mcp-server/tests/metadata/test_read_only_operations_list.py
function sample_service_reference_list_response (line 20) | def sample_service_reference_list_response():
function sample_service_reference_response (line 26) | def sample_service_reference_response():
function test_read_only_operations_initialization (line 75) | def test_read_only_operations_initialization(
function test_read_only_operations_has_method_missing_service (line 94) | def test_read_only_operations_has_method_missing_service(
function test_read_only_operations_has_method_second_call_for_service_queries_local_cache (line 124) | def test_read_only_operations_has_method_second_call_for_service_queries...
function test_read_only_operations_has_method_error (line 157) | def test_read_only_operations_has_method_error(
function test_service_reference_urls_by_service_error (line 183) | def test_service_reference_urls_by_service_error(mocked_requests_get):
function test_read_only_operations_has_method_custom_operation (line 194) | def test_read_only_operations_has_method_custom_operation():
function test_read_only_operations_has_method_operation_from_metadata (line 202) | def test_read_only_operations_has_method_operation_from_metadata():
function test_read_only_operations_overrides (line 213) | def test_read_only_operations_overrides():
FILE: src/aws-api-mcp-server/tests/middleware/test_http_header_validation_middleware.py
function test_origin_header_validation_passes (line 22) | async def test_origin_header_validation_passes(
function test_origin_header_validation_fails (line 53) | async def test_origin_header_validation_fails(
function test_host_header_validation_passes (line 89) | async def test_host_header_validation_passes(
function test_host_header_validation_fails (line 123) | async def test_host_header_validation_fails(
function test_both_headers_validated_independently (line 147) | async def test_both_headers_validated_independently(mock_get_headers: Ma...
function test_host_fails_validation_when_both_present (line 177) | async def test_host_fails_validation_when_both_present(mock_get_headers:...
function test_origin_fails_validation_when_both_present (line 207) | async def test_origin_fails_validation_when_both_present(mock_get_header...
function test_no_origin_or_host_headers (line 237) | async def test_no_origin_or_host_headers(mock_get_headers: MagicMock):
function test_port_removal_from_origin (line 262) | async def test_port_removal_from_origin(
function test_empty_allowed_origins (line 285) | async def test_empty_allowed_origins(mock_get_headers: MagicMock):
FILE: src/aws-api-m
Copy disabled (too large)
Download .json
Condensed preview — 3393 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (38,146K chars).
[
{
"path": ".devcontainer/devcontainer.json",
"chars": 2744,
"preview": "{\n \"containerEnv\": {\n \"MY_CONTAINER_VAR\": \"${localEnv:MY_CONTAINER_VAR:default-container-here}\"\n },\n \"customizatio"
},
{
"path": ".github/CODEOWNERS",
"chars": 10982,
"preview": "# [CODEOWNERS](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 4093,
"preview": "---\nname: \"🐛 Bug Report\"\ndescription: Report a bug\ntitle: \"(module name): (short issue description)\"\nlabels: [bug, needs"
},
{
"path": ".github/ISSUE_TEMPLATE/documentation.yml",
"chars": 600,
"preview": "---\nname: \"📕 Documentation Issue\"\ndescription: Report an issue in the API Reference documentation or Developer Guide\ntit"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.yml",
"chars": 1439,
"preview": "---\nname: 🚀 Feature Request\ndescription: Suggest an idea for this project\ntitle: \"(module name): (short issue descriptio"
},
{
"path": ".github/ISSUE_TEMPLATE/rfc.yml",
"chars": 2529,
"preview": "name: 🚧 Request for Comments (RFC)\ndescription: Feature design and detailed proposals\ntitle: \"RFC: TITLE\"\nlabels: [\"RFC-"
},
{
"path": ".github/ISSUE_TEMPLATE/support_awslabs_mcp_servers.yml",
"chars": 2785,
"preview": "name: 💞 Support Awslabs MCP Servers (become a reference)\ndescription: Add your organization's name or logo to the Awslab"
},
{
"path": ".github/SECURITY",
"chars": 315,
"preview": "Reporting a Vulnerability\nIf you discover a potential security issue in this project we ask that you notify AWS/Amazon S"
},
{
"path": ".github/SUPPORT",
"chars": 121,
"preview": "# Level of Effort\n\nWe use GitHub to communicate and support this repository.\n\nIf you need help, please create and issue."
},
{
"path": ".github/actions/build-and-push-container-image/action.yml",
"chars": 6298,
"preview": "---\n# This local action builds an image and pushes it to registries\nname: \"Build and push image\"\nauthor: \"AWS Labs MCP\"\n"
},
{
"path": ".github/actions/clear-space-ubuntu-latest-agressively/action.yml",
"chars": 2726,
"preview": "---\n# This local action builds an image and pushes it to registries\nname: \"Clear Space in Ubuntu Latest Agressively\"\naut"
},
{
"path": ".github/codecov.yml",
"chars": 230,
"preview": "coverage:\n status:\n project:\n default: # default is the status check's name, not default settings\n thr"
},
{
"path": ".github/dependabot.yml",
"chars": 1299,
"preview": "# Please see the documentation for all configuration options:\n# https://docs.github.com/code-security/dependabot/dependa"
},
{
"path": ".github/pull_request_template.md",
"chars": 915,
"preview": "<!-- markdownlint-disable MD041 MD043 -->\nFixes\n\n## Summary\n\n### Changes\n\n> Please provide a summary of what's being cha"
},
{
"path": ".github/workflows/RELEASE_INSTRUCTIONS.md",
"chars": 4925,
"preview": "# Release Instructions\n\nIMPORTANT: A release will be made for all packages with changes since the last published release"
},
{
"path": ".github/workflows/aws-api-mcp-upgrade-version.yml",
"chars": 9256,
"preview": "---\nname: AWS API MCP Server - Upgrade AWS CLI Version\ndescription: |\n This workflow upgrades the AWS CLI version in sr"
},
{
"path": ".github/workflows/bandit-requirements.txt",
"chars": 9727,
"preview": "# This file was autogenerated by uv via the following command:\n# uv pip compile --no-cache --universal --generate-has"
},
{
"path": ".github/workflows/bandit.yml",
"chars": 2454,
"preview": "# This workflow uses actions that are not certified by GitHub.\n# They are provided by a third-party and are governed by\n"
},
{
"path": ".github/workflows/cfn_nag.yml",
"chars": 1773,
"preview": "name: cfn_nag\n\n# Controls when the workflow will run\non:\n # Triggers the workflow on push or pull request events but on"
},
{
"path": ".github/workflows/check-gh-pages-builds.yml",
"chars": 660,
"preview": "name: Check that GitHub Pages Builds\n\npermissions: {}\n\non:\n push:\n pull_request:\n branches:\n - main\njobs:\n buil"
},
{
"path": ".github/workflows/check-license-header-hash.txt",
"chars": 615,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": ".github/workflows/check-license-header-slash.txt",
"chars": 628,
"preview": "// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n//\n// Licensed under the Apache License, Version 2"
},
{
"path": ".github/workflows/check-license-header.json",
"chars": 1698,
"preview": "[\n {\n \"exclude\": [\n \"**/tests/**\",\n \".venv/**\",\n \"venv/**\",\n \"**/venv/**\",\n \"**/*venv/**\",\n"
},
{
"path": ".github/workflows/check-license-header.yml",
"chars": 651,
"preview": "# This workflow runs an automated pull request code review when labeled\nname: Check License Header\non:\n push:\n workflo"
},
{
"path": ".github/workflows/checkov.yml",
"chars": 1886,
"preview": "name: checkov\n\n# Controls when the workflow will run\non:\n # Triggers the workflow on push or pull request events but on"
},
{
"path": ".github/workflows/codeql.yml",
"chars": 4960,
"preview": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# Y"
},
{
"path": ".github/workflows/dependency-review-action.yml",
"chars": 1167,
"preview": "name: 'Dependency Review'\non: [pull_request]\n\npermissions: {}\n\njobs:\n dependency-review:\n runs-on: ubuntu-latest\n "
},
{
"path": ".github/workflows/detect-secrets-requirements.txt",
"chars": 13822,
"preview": "#\n# This file is autogenerated by pip-compile with Python 3.12\n# by the following command:\n#\n# pip-compile --generate"
},
{
"path": ".github/workflows/gh-pages.yml",
"chars": 1804,
"preview": "name: Deploy to GitHub Pages\n\npermissions: {}\n\non:\n push:\n branches:\n - main\n # Review gh actions docs if yo"
},
{
"path": ".github/workflows/merge-prevention.yml",
"chars": 4006,
"preview": "---\n# This workflow is to prevent unintentional merges that cannot be accomplished by rulesets or other settings.\nname: "
},
{
"path": ".github/workflows/powershell.yml",
"chars": 1149,
"preview": "# This workflow uses actions that are not certified by GitHub.\n# They are provided by a third-party and are governed by\n"
},
{
"path": ".github/workflows/pre-commit-requirements.txt",
"chars": 6706,
"preview": "#\n# This file is autogenerated by pip-compile with Python 3.10\n# by the following command:\n#\n# pip-compile --generate"
},
{
"path": ".github/workflows/pre-commit.yml",
"chars": 2227,
"preview": "name: pre-commit\n\non:\n pull_request:\n push:\npermissions: {}\njobs:\n detect-precommit:\n runs-on: ubuntu-latest\n p"
},
{
"path": ".github/workflows/pull-request-lint.yml",
"chars": 2084,
"preview": "name: pull-request-lint\n\non:\n pull_request_target:\n branches: [ \"main\" ]\n types:\n - labeled\n - opened\n "
},
{
"path": ".github/workflows/python.yml",
"chars": 12246,
"preview": "name: Python\n\non:\n push:\n pull_request:\n workflow_dispatch:\n\npermissions: {}\n\njobs:\n detect-packages:\n runs-on: u"
},
{
"path": ".github/workflows/release-initiate-branch.yml",
"chars": 12657,
"preview": "---\nname: Release Branch (initiated)\ndescription: |\n This workflow initiates a release branch when changes are detected"
},
{
"path": ".github/workflows/release-merge-tag.yml",
"chars": 7643,
"preview": "---\nname: Release Merged (automatic)\ndescription: |\n This workflow creates a tag on the `main` branch when a pull reque"
},
{
"path": ".github/workflows/release.py",
"chars": 19299,
"preview": "#!/usr/bin/env uv run --script\n# /// script\n# requires-python = \">=3.12\"\n# dependencies = [\n# \"click>=8.1.8\",\n# "
},
{
"path": ".github/workflows/release.yml",
"chars": 18627,
"preview": "---\nname: Release Deploy (approvals)\ndescription: |\n This workflow drafts a release when a tag is pushed to the reposit"
},
{
"path": ".github/workflows/scanners.yml",
"chars": 921,
"preview": "name: Scanners\n\non:\n push:\n pull_request:\n workflow_dispatch:\n\npermissions: {}\n\njobs:\n\n secrets-scanner:\n runs-on"
},
{
"path": ".github/workflows/scorecard-analysis.yml",
"chars": 1977,
"preview": "name: Scorecard analysis workflow\non:\n push:\n # Only the default branch is supported.\n branches:\n - main\n sch"
},
{
"path": ".github/workflows/semgrep-requirements.txt",
"chars": 40083,
"preview": "# This file was autogenerated by uv via the following command:\n# uv pip compile --no-cache --universal --generate-has"
},
{
"path": ".github/workflows/semgrep.yml",
"chars": 1139,
"preview": "name: Semgrep\non:\n workflow_dispatch: {}\n pull_request: {}\n push:\n branches:\n - main\n # paths:\n # - ."
},
{
"path": ".github/workflows/stale.yml",
"chars": 1623,
"preview": "name: stale\non:\n schedule:\n - cron: 0 1 * * *\n workflow_dispatch: {}\npermissions: {}\njobs:\n stale:\n runs-on: ub"
},
{
"path": ".github/workflows/trivy.yml",
"chars": 6563,
"preview": "# This workflow uses actions that are not certified by GitHub.\n# They are provided by a third-party and are governed by\n"
},
{
"path": ".github/workflows/typescript.yml",
"chars": 6332,
"preview": "name: TypeScript\n\non:\n push:\n pull_request:\n\npermissions: {}\n\njobs:\n detect-packages:\n permissions:\n contents"
},
{
"path": ".gitignore",
"chars": 10749,
"preview": "# Created by https://www.toptal.com/developers/gitignore/api/linux,python,windows,macOS,VisualStudioCode\n# Edit at https"
},
{
"path": ".pre-commit-config.yaml",
"chars": 2465,
"preview": "repos:\n- repo: https://github.com/pre-commit/pre-commit-hooks\n rev: v6.0.0\n hooks:\n - id: check-added-large"
},
{
"path": ".python-version",
"chars": 5,
"preview": "3.13\n"
},
{
"path": ".ruff.toml",
"chars": 690,
"preview": "# ruff.toml\n\nline-length = 99\nextend-include = [\"*.ipynb\"]\nforce-exclude = true\nexclude = [\n \".venv\",\n \"**/__pycac"
},
{
"path": ".secrets.baseline",
"chars": 32118,
"preview": "{\n \"version\": \"1.5.0\",\n \"plugins_used\": [\n {\n \"name\": \"ArtifactoryDetector\"\n },\n {\n \"name\": \"AWSKey"
},
{
"path": ".vex/CVE-2023-45853.openvex.json",
"chars": 1368,
"preview": "{\n \"@context\": \"https://openvex.dev/ns/v0.2.0\",\n \"@id\": \"https://openvex.dev/docs/public/vex-6ea18ff8a7a9798e9e00ad480"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 309,
"preview": "## Code of Conduct\nThis project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-condu"
},
{
"path": "CONTRIBUTING.md",
"chars": 3485,
"preview": "# Contributing Guidelines\n\nThank you for your interest in contributing to our project. Whether it's a bug report, new fe"
},
{
"path": "DESIGN_GUIDELINES.md",
"chars": 37754,
"preview": "# MCP Server Design Guidelines\n\nThis document outlines the design guidelines and best practices for developing MCP (Mode"
},
{
"path": "DEVELOPER_GUIDE.md",
"chars": 15834,
"preview": "# Developer guide\n\nAt the moment, there is no dedicated development container, thus you need to configure your local dev"
},
{
"path": "LICENSE",
"chars": 10142,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "NOTICE",
"chars": 67,
"preview": "Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n"
},
{
"path": "README.md",
"chars": 226057,
"preview": "# Open source MCP servers for AWS\n\nA suite of specialized MCP servers that help you get the most out of AWS, wherever yo"
},
{
"path": "VIBE_CODING_TIPS_TRICKS.md",
"chars": 11044,
"preview": "# Vibe Coding Tips and Tricks\n\n> Note\n> This field is evolving quickly, and we will update this guide as new methods and"
},
{
"path": "docs/migration-bedrock-data-automation.md",
"chars": 2366,
"preview": "# Migration Guide: AWS Bedrock Data Automation MCP Server\n\nThis guide helps you migrate from `awslabs.aws-bedrock-data-a"
},
{
"path": "docs/migration-ccapi.md",
"chars": 7582,
"preview": "# Migration Guide: CCAPI MCP Server to AWS IAC MCP Server\n\nThis guide helps you migrate from `awslabs.ccapi-mcp-server` "
},
{
"path": "docs/migration-cfn.md",
"chars": 6364,
"preview": "# Migration Guide: CloudFormation MCP Server to AWS IAC MCP Server\n\nThis guide helps you migrate from `awslabs.cfn-mcp-s"
},
{
"path": "docs/migration-cloudwatch-appsignals.md",
"chars": 3664,
"preview": "# Migration Guide: CloudWatch AppSignals to CloudWatch Application Signals\n\nThis guide helps you migrate from `awslabs.c"
},
{
"path": "docs/migration-core.md",
"chars": 6658,
"preview": "# Migration Guide: Core MCP Server\n\nThis guide helps you migrate from `awslabs.core-mcp-server` to configuring individua"
},
{
"path": "docs/migration-cost-explorer.md",
"chars": 4513,
"preview": "# Migration Guide: Cost Explorer MCP Server to Billing and Cost Management MCP Server\n\nThis guide helps you migrate from"
},
{
"path": "docs/migration-diagram.md",
"chars": 5375,
"preview": "# Migration Guide: AWS Diagram MCP Server to Diagram Agent Skill\n\nThis guide helps you migrate from `awslabs.aws-diagram"
},
{
"path": "docs/migration-git-repo-research.md",
"chars": 2534,
"preview": "# Migration Guide: Git Repo Research MCP Server\n\nThis guide helps you migrate from `awslabs.git-repo-research-mcp-server"
},
{
"path": "docs/migration-nova-canvas.md",
"chars": 2893,
"preview": "# Migration Guide: Nova Canvas MCP Server\n\nThis guide helps you migrate from `awslabs.nova-canvas-mcp-server` to the com"
},
{
"path": "docs/migration-terraform.md",
"chars": 6511,
"preview": "# Migration Guide: AWS Labs Terraform MCP Server to HashiCorp Official\n\nThis guide helps you migrate from `awslabs.terra"
},
{
"path": "docusaurus/.gitignore",
"chars": 233,
"preview": "# Dependencies\n/node_modules\n\n# Production\n/build\n\n# Generated files\n.docusaurus\n.cache-loader\n\n# Misc\n.DS_Store\n.env.lo"
},
{
"path": "docusaurus/README.md",
"chars": 521,
"preview": "# Website\n\nThis website is built using [Docusaurus](https://docusaurus.io/), a modern static website generator.\n\n## Inst"
},
{
"path": "docusaurus/docs/installation.md",
"chars": 13262,
"preview": "# Installation\n\nEach server has specific installation instructions with one-click installs for Kiro, Cursor, and VSCode."
},
{
"path": "docusaurus/docs/intro.md",
"chars": 12471,
"preview": "---\nslug: /\ntitle: Welcome to Open Source MCP Servers for AWS\n---\n\nimport styles from '@site/src/components/ServerCards/"
},
{
"path": "docusaurus/docs/samples/index.md",
"chars": 276,
"preview": "---\ntitle: Open Source MCP servers for AWS - Samples\n---\n\nimport ReadmeContent from \"../../../samples/README.md\";\n\n<div "
},
{
"path": "docusaurus/docs/samples/mcp-integration-with-kb.md",
"chars": 310,
"preview": "---\ntitle: MCP Integration with Amazon Bedrock Knowledge Bases\n---\n\nimport ReadmeContent from \"../../../samples/mcp-inte"
},
{
"path": "docusaurus/docs/samples/mcp-integration-with-nova-canvas.md",
"chars": 308,
"preview": "---\ntitle: MCP Integration with Amazon Nova Canvas\n---\n\n\nimport ReadmeContent from \"../../../samples/mcp-integration-wit"
},
{
"path": "docusaurus/docs/samples/stepfunctions-tool-mcp-server.md",
"chars": 291,
"preview": "---\ntitle: Step Functions Tool Sample\n---\n\nimport ReadmeContent from \"../../../samples/stepfunctions-tool-mcp-server/REA"
},
{
"path": "docusaurus/docs/servers/amazon-bedrock-agentcore-mcp-server.md",
"chars": 299,
"preview": "---\ntitle: AWS Bedrock AgentCore MCP Server\n---\n\nimport ReadmeContent from \"../../../src/amazon-bedrock-agentcore-mcp-se"
},
{
"path": "docusaurus/docs/servers/amazon-kendra-index-mcp-server.md",
"chars": 292,
"preview": "---\ntitle: Amazon Kendra Index MCP Server\n---\n\nimport ReadmeContent from \"../../../src/amazon-kendra-index-mcp-server/RE"
},
{
"path": "docusaurus/docs/servers/amazon-keyspaces-mcp-server.md",
"chars": 305,
"preview": "---\ntitle: Amazon Keyspaces (for Apache Cassandra) Server\n---\n\nimport ReadmeContent from \"../../../src/amazon-keyspaces-"
},
{
"path": "docusaurus/docs/servers/amazon-mq-mcp-server.md",
"chars": 272,
"preview": "---\ntitle: Amazon MQ MCP Server\n---\n\nimport ReadmeContent from \"../../../src/amazon-mq-mcp-server/README.md\";\n\n<div clas"
},
{
"path": "docusaurus/docs/servers/amazon-neptune-mcp-server.md",
"chars": 282,
"preview": "---\ntitle: Amazon Neptune MCP Server\n---\n\nimport ReadmeContent from \"../../../src/amazon-neptune-mcp-server/README.md\";\n"
},
{
"path": "docusaurus/docs/servers/amazon-qbusiness-anonymous-mcp-server.md",
"chars": 307,
"preview": "---\ntitle: Amazon Q Business anonymous MCP Server\n---\n\nimport ReadmeContent from \"../../../src/amazon-qbusiness-anonymou"
},
{
"path": "docusaurus/docs/servers/amazon-qindex-mcp-server.md",
"chars": 281,
"preview": "---\ntitle: Amazon Q Index MCP Server\n---\n\nimport ReadmeContent from \"../../../src/amazon-qindex-mcp-server/README.md\";\n\n"
},
{
"path": "docusaurus/docs/servers/amazon-sns-sqs-mcp-server.md",
"chars": 282,
"preview": "---\ntitle: Amazon SNS SQS MCP Server\n---\n\nimport ReadmeContent from \"../../../src/amazon-sns-sqs-mcp-server/README.md\";\n"
},
{
"path": "docusaurus/docs/servers/aurora-dsql-mcp-server.md",
"chars": 283,
"preview": "---\ntitle: Amazon Aurora DSQL MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aurora-dsql-mcp-server/README.md\";"
},
{
"path": "docusaurus/docs/servers/aws-api-mcp-server.md",
"chars": 268,
"preview": "---\ntitle: AWS API MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aws-api-mcp-server/README.md\";\n\n<div classNam"
},
{
"path": "docusaurus/docs/servers/aws-appsync-mcp-server.md",
"chars": 276,
"preview": "---\ntitle: AWS AppSync MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aws-appsync-mcp-server/README.md\";\n\n<div "
},
{
"path": "docusaurus/docs/servers/aws-bedrock-custom-model-import-mcp-server.md",
"chars": 316,
"preview": "---\ntitle: AWS Bedrock Custom Model Import MCP server\n---\n\nimport ReadmeContent from \"../../../src/aws-bedrock-custom-mo"
},
{
"path": "docusaurus/docs/servers/aws-bedrock-data-automation-mcp-server.md",
"chars": 308,
"preview": "---\ntitle: AWS Bedrock Data Automation MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aws-bedrock-data-automati"
},
{
"path": "docusaurus/docs/servers/aws-dataprocessing-mcp-server.md",
"chars": 291,
"preview": "---\ntitle: AWS Data Processing MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aws-dataprocessing-mcp-server/REA"
},
{
"path": "docusaurus/docs/servers/aws-diagram-mcp-server.md",
"chars": 276,
"preview": "---\ntitle: AWS Diagram MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aws-diagram-mcp-server/README.md\";\n\n<div "
},
{
"path": "docusaurus/docs/servers/aws-documentation-mcp-server.md",
"chars": 288,
"preview": "---\ntitle: AWS Documentation MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aws-documentation-mcp-server/README"
},
{
"path": "docusaurus/docs/servers/aws-healthomics-mcp-server.md",
"chars": 284,
"preview": "---\ntitle: AWS HealthOmics MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aws-healthomics-mcp-server/README.md\""
},
{
"path": "docusaurus/docs/servers/aws-iac-mcp-server.md",
"chars": 268,
"preview": "---\ntitle: AWS IaC MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aws-iac-mcp-server/README.md\";\n\n<div classNam"
},
{
"path": "docusaurus/docs/servers/aws-iot-sitewise-mcp-server.md",
"chars": 286,
"preview": "---\ntitle: AWS IoT Sitewise MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aws-iot-sitewise-mcp-server/README.m"
},
{
"path": "docusaurus/docs/servers/aws-knowledge-mcp-server.md",
"chars": 280,
"preview": "---\ntitle: AWS Knowledge MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aws-knowledge-mcp-server/README.md\";\n\n<"
},
{
"path": "docusaurus/docs/servers/aws-location-mcp-server.md",
"chars": 286,
"preview": "---\ntitle: AWS Location Service MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aws-location-mcp-server/README.m"
},
{
"path": "docusaurus/docs/servers/aws-msk-mcp-server.md",
"chars": 268,
"preview": "---\ntitle: AWS MSK MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aws-msk-mcp-server/README.md\";\n\n<div classNam"
},
{
"path": "docusaurus/docs/servers/aws-network-mcp-server.md",
"chars": 276,
"preview": "---\ntitle: AWS Network MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aws-network-mcp-server/README.md\";\n\n<div "
},
{
"path": "docusaurus/docs/servers/aws-pricing-mcp-server.md",
"chars": 276,
"preview": "---\ntitle: AWS Pricing MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aws-pricing-mcp-server/README.md\";\n\n<div "
},
{
"path": "docusaurus/docs/servers/aws-serverless-mcp-server.md",
"chars": 282,
"preview": "---\ntitle: AWS Serverless MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aws-serverless-mcp-server/README.md\";\n"
},
{
"path": "docusaurus/docs/servers/aws-support-mcp-server.md",
"chars": 276,
"preview": "---\ntitle: AWS Support MCP Server\n---\n\nimport ReadmeContent from \"../../../src/aws-support-mcp-server/README.md\";\n\n<div "
},
{
"path": "docusaurus/docs/servers/bedrock-kb-retrieval-mcp-server.md",
"chars": 313,
"preview": "---\ntitle: Amazon Bedrock Knowledge Base Retrieval MCP Server\n---\n\nimport ReadmeContent from \"../../../src/bedrock-kb-re"
},
{
"path": "docusaurus/docs/servers/billing-cost-management-mcp-server.md",
"chars": 308,
"preview": "---\ntitle: AWS Billing and Cost Management MCP Server\n---\n\nimport ReadmeContent from \"../../../src/billing-cost-manageme"
},
{
"path": "docusaurus/docs/servers/ccapi-mcp-server.md",
"chars": 280,
"preview": "---\ntitle: AWS Cloud Control API MCP Server\n---\n\nimport ReadmeContent from \"../../../src/ccapi-mcp-server/README.md\";\n\n<"
},
{
"path": "docusaurus/docs/servers/cdk-mcp-server.md",
"chars": 264,
"preview": "---\ntitle: AWS CDK MCP Server\n---\n\nimport ReadmeContent from \"../../../src/cdk-mcp-server/README.md\";\n\n<div className=\"r"
},
{
"path": "docusaurus/docs/servers/cfn-mcp-server.md",
"chars": 275,
"preview": "---\ntitle: AWS CloudFormation MCP Server\n---\n\nimport ReadmeContent from \"../../../src/cfn-mcp-server/README.md\";\n\n<div c"
},
{
"path": "docusaurus/docs/servers/cloudtrail-mcp-server.md",
"chars": 274,
"preview": "---\ntitle: CloudTrail MCP Server\n---\n\nimport ReadmeContent from \"../../../src/cloudtrail-mcp-server/README.md\";\n\n<div cl"
},
{
"path": "docusaurus/docs/servers/cloudwatch-applicationsignals-mcp-server.md",
"chars": 313,
"preview": "---\ntitle: CloudWatch Application Signals MCP Server\n---\n\nimport ReadmeContent from \"../../../src/cloudwatch-application"
},
{
"path": "docusaurus/docs/servers/cloudwatch-mcp-server.md",
"chars": 274,
"preview": "---\ntitle: CloudWatch MCP Server\n---\n\nimport ReadmeContent from \"../../../src/cloudwatch-mcp-server/README.md\";\n\n<div cl"
},
{
"path": "docusaurus/docs/servers/code-doc-gen-mcp-server.md",
"chars": 295,
"preview": "---\ntitle: Code Documentation Generation MCP Server\n---\n\nimport ReadmeContent from \"../../../src/code-doc-gen-mcp-server"
},
{
"path": "docusaurus/docs/servers/core-mcp-server.md",
"chars": 262,
"preview": "---\ntitle: Core MCP Server\n---\n\nimport ReadmeContent from \"../../../src/core-mcp-server/README.md\";\n\n<div className=\"rea"
},
{
"path": "docusaurus/docs/servers/cost-explorer-mcp-server.md",
"chars": 284,
"preview": "---\ntitle: AWS Cost Explorer MCP Server\n---\n\nimport ReadmeContent from \"../../../src/cost-explorer-mcp-server/README.md\""
},
{
"path": "docusaurus/docs/servers/document-loader-mcp-server.md",
"chars": 284,
"preview": "---\ntitle: Document Loader MCP Server\n---\n\nimport ReadmeContent from \"../../../src/document-loader-mcp-server/README.md\""
},
{
"path": "docusaurus/docs/servers/documentdb-mcp-server.md",
"chars": 281,
"preview": "---\ntitle: Amazon DocumentDB MCP Server\n---\n\nimport ReadmeContent from \"../../../src/documentdb-mcp-server/README.md\";\n\n"
},
{
"path": "docusaurus/docs/servers/dynamodb-mcp-server.md",
"chars": 277,
"preview": "---\ntitle: Amazon DynamoDB MCP Server\n---\n\nimport ReadmeContent from \"../../../src/dynamodb-mcp-server/README.md\";\n\n<div"
},
{
"path": "docusaurus/docs/servers/ecs-mcp-server.md",
"chars": 267,
"preview": "---\ntitle: Amazon ECS MCP Server\n---\n\nimport ReadmeContent from \"../../../src/ecs-mcp-server/README.md\";\n\n<div className"
},
{
"path": "docusaurus/docs/servers/eks-mcp-server.md",
"chars": 267,
"preview": "---\ntitle: Amazon EKS MCP Server\n---\n\nimport ReadmeContent from \"../../../src/eks-mcp-server/README.md\";\n\n<div className"
},
{
"path": "docusaurus/docs/servers/elasticache-mcp-server.md",
"chars": 283,
"preview": "---\ntitle: Amazon ElastiCache MCP Server\n---\n\nimport ReadmeContent from \"../../../src/elasticache-mcp-server/README.md\";"
},
{
"path": "docusaurus/docs/servers/finch-mcp-server.md",
"chars": 264,
"preview": "---\ntitle: Finch MCP Server\n---\n\nimport ReadmeContent from \"../../../src/finch-mcp-server/README.md\";\n\n<div className=\"r"
},
{
"path": "docusaurus/docs/servers/frontend-mcp-server.md",
"chars": 270,
"preview": "---\ntitle: Frontend MCP Server\n---\n\nimport ReadmeContent from \"../../../src/frontend-mcp-server/README.md\";\n\n<div classN"
},
{
"path": "docusaurus/docs/servers/git-repo-research-mcp-server.md",
"chars": 288,
"preview": "---\ntitle: Git Repo Research MCP Server\n---\n\nimport ReadmeContent from \"../../../src/git-repo-research-mcp-server/README"
},
{
"path": "docusaurus/docs/servers/healthimaging-mcp-server.md",
"chars": 10659,
"preview": "# AWS HealthImaging MCP Server\n\nA comprehensive Model Context Protocol (MCP) server for AWS HealthImaging operations. Pr"
},
{
"path": "docusaurus/docs/servers/healthlake-mcp-server.md",
"chars": 274,
"preview": "---\ntitle: HealthLake MCP Server\n---\n\nimport ReadmeContent from \"../../../src/healthlake-mcp-server/README.md\";\n\n<div cl"
},
{
"path": "docusaurus/docs/servers/iam-mcp-server.md",
"chars": 264,
"preview": "---\ntitle: AWS IAM MCP Server\n---\n\nimport ReadmeContent from \"../../../src/iam-mcp-server/README.md\";\n\n<div className=\"r"
},
{
"path": "docusaurus/docs/servers/lambda-tool-mcp-server.md",
"chars": 275,
"preview": "---\ntitle: AWS Lambda MCP Server\n---\n\nimport ReadmeContent from \"../../../src/lambda-tool-mcp-server/README.md\";\n\n<div c"
},
{
"path": "docusaurus/docs/servers/memcached-mcp-server.md",
"chars": 295,
"preview": "---\ntitle: Amazon ElastiCache for Memcached MCP Server\n---\n\nimport ReadmeContent from \"../../../src/memcached-mcp-server"
},
{
"path": "docusaurus/docs/servers/mysql-mcp-server.md",
"chars": 278,
"preview": "---\ntitle: Amazon Aurora MySQL MCP Server\n---\n\nimport ReadmeContent from \"../../../src/mysql-mcp-server/README.md\";\n\n<di"
},
{
"path": "docusaurus/docs/servers/nova-canvas-mcp-server.md",
"chars": 283,
"preview": "---\ntitle: Amazon Nova Canvas MCP Server\n---\n\nimport ReadmeContent from \"../../../src/nova-canvas-mcp-server/README.md\";"
},
{
"path": "docusaurus/docs/servers/openapi-mcp-server.md",
"chars": 268,
"preview": "---\ntitle: OpenAPI MCP Server\n---\n\nimport ReadmeContent from \"../../../src/openapi-mcp-server/README.md\";\n\n<div classNam"
},
{
"path": "docusaurus/docs/servers/postgres-mcp-server.md",
"chars": 284,
"preview": "---\ntitle: Amazon Aurora Postgres MCP Server\n---\n\nimport ReadmeContent from \"../../../src/postgres-mcp-server/README.md\""
},
{
"path": "docusaurus/docs/servers/prometheus-mcp-server.md",
"chars": 274,
"preview": "---\ntitle: Prometheus MCP Server\n---\n\nimport ReadmeContent from \"../../../src/prometheus-mcp-server/README.md\";\n\n<div cl"
},
{
"path": "docusaurus/docs/servers/redshift-mcp-server.md",
"chars": 277,
"preview": "---\ntitle: Amazon Redshift MCP Server\n---\n\nimport ReadmeContent from \"../../../src/redshift-mcp-server/README.md\";\n\n<div"
},
{
"path": "docusaurus/docs/servers/s3-tables-mcp-server.md",
"chars": 276,
"preview": "---\ntitle: AWS S3 Tables MCP Server\n---\n\nimport ReadmeContent from \"../../../src/s3-tables-mcp-server/README.md\";\n\n<div "
},
{
"path": "docusaurus/docs/servers/sagemaker-ai-mcp-server.md",
"chars": 285,
"preview": "---\ntitle: Amazon SageMaker AI MCP Server\n---\n\nimport ReadmeContent from \"../../../src/sagemaker-ai-mcp-server/README.md"
},
{
"path": "docusaurus/docs/servers/sagemaker-unified-studio-spark-troubleshooting-mcp-server.md",
"chars": 374,
"preview": "---\ntitle: Amazon SageMaker Unified Studio MCP for Spark Troubleshooting and Code Recommendation\n---\n\nimport ReadmeConte"
},
{
"path": "docusaurus/docs/servers/sagemaker-unified-studio-spark-upgrade-mcp-server.md",
"chars": 334,
"preview": "---\ntitle: Amazon SageMaker Unified Studio MCP for Spark Upgrade\n---\n\nimport ReadmeContent from \"../../../src/sagemaker-"
},
{
"path": "docusaurus/docs/servers/stepfunctions-tool-mcp-server.md",
"chars": 295,
"preview": "---\ntitle: AWS Step Functions Tool MCP Server\n---\n\nimport ReadmeContent from \"../../../src/stepfunctions-tool-mcp-server"
},
{
"path": "docusaurus/docs/servers/syntheticdata-mcp-server.md",
"chars": 281,
"preview": "---\ntitle: Synthetic Data MCP Server\n---\n\nimport ReadmeContent from \"../../../src/syntheticdata-mcp-server/README.md\";\n\n"
},
{
"path": "docusaurus/docs/servers/terraform-mcp-server.md",
"chars": 276,
"preview": "---\ntitle: AWS Terraform MCP Server\n---\n\nimport ReadmeContent from \"../../../src/terraform-mcp-server/README.md\";\n\n<div "
},
{
"path": "docusaurus/docs/servers/timestream-for-influxdb-mcp-server.md",
"chars": 307,
"preview": "---\ntitle: Amazon Timestream for InfluxDB MCP Server\n---\n\nimport ReadmeContent from \"../../../src/timestream-for-influxd"
},
{
"path": "docusaurus/docs/servers/valkey-mcp-server.md",
"chars": 298,
"preview": "---\ntitle: Amazon ElastiCache/MemoryDB for Valkey MCP Server\n---\n\nimport ReadmeContent from \"../../../src/valkey-mcp-ser"
},
{
"path": "docusaurus/docs/servers/well-architected-security-mcp-server.mdx",
"chars": 324,
"preview": "---\ntitle: AWS Well-Architected Security Assessment Tool MCP Server\n---\n\nimport ReadmeContent from \"../../../src/well-ar"
},
{
"path": "docusaurus/docs/vibe_coding.md",
"chars": 268,
"preview": "---\ntitle: Vibe Coding Tips and Tricks\n---\n\nimport ReadmeContent from \"../../VIBE_CODING_TIPS_TRICKS.md\";\n\n<div classNam"
},
{
"path": "docusaurus/docusaurus.config.ts",
"chars": 3740,
"preview": "import {themes as prismThemes} from 'prism-react-renderer';\nimport type {Config} from '@docusaurus/types';\nimport type *"
},
{
"path": "docusaurus/package.json",
"chars": 1226,
"preview": "{\n \"browserslist\": {\n \"development\": [\n \"last 3 chrome version\",\n \"last 3 firefox version\",\n \"last 5 "
},
{
"path": "docusaurus/sidebars.ts",
"chars": 5551,
"preview": "import type { SidebarsConfig } from \"@docusaurus/plugin-content-docs\";\n\n// This runs in Node.js - Don't use client-side "
},
{
"path": "docusaurus/src/components/HomepageFeatures/styles.module.css",
"chars": 138,
"preview": ".features {\n display: flex;\n align-items: center;\n padding: 2rem 0;\n width: 100%;\n}\n\n.featureSvg {\n height: 200px;\n"
},
{
"path": "docusaurus/src/components/ServerCards/index.tsx",
"chars": 9254,
"preview": "import React, { useState, useEffect } from 'react';\nimport clsx from 'clsx';\nimport styles from './styles.module.css';\ni"
},
{
"path": "docusaurus/src/components/ServerCards/styles.module.css",
"chars": 5878,
"preview": "/* Server Cards Container */\n.serverCardsContainer {\n max-width: 100%;\n margin: 2rem 0;\n}\n\n/* Search and Filter Contro"
},
{
"path": "docusaurus/src/css/custom.css",
"chars": 1579,
"preview": "/**\n * Any CSS included here will be global. The classic template\n * bundles Infima by default. Infima is a CSS framewor"
},
{
"path": "docusaurus/src/css/doc-override.css",
"chars": 895,
"preview": "/* Docusaurus document item max-width override */\n/* This file specifically targets the document content width */\n\n/* Pr"
},
{
"path": "docusaurus/src/pages/index.module.css",
"chars": 365,
"preview": "/**\n * CSS files with the .module.css suffix will be treated as CSS modules\n * and scoped locally.\n */\n\n.heroBanner {\n "
},
{
"path": "docusaurus/src/pages/servers.tsx",
"chars": 689,
"preview": "import React from 'react';\nimport Layout from '@theme/Layout';\nimport ServerCards from '@site/src/components/ServerCards"
},
{
"path": "docusaurus/static/.nojekyll",
"chars": 0,
"preview": ""
},
{
"path": "docusaurus/static/assets/server-cards.json",
"chars": 43102,
"preview": "{\n \"categories\": [\n {\n \"description\": \"Essential MCP servers for AWS resource management\",\n \"icon\": \"\\ud83"
},
{
"path": "docusaurus/tsconfig.json",
"chars": 138,
"preview": "{\n \"compilerOptions\": {\n \"baseUrl\": \".\"\n },\n \"exclude\": [\n \".docusaurus\",\n \"build\"\n ],\n \"extends\": \"@docus"
},
{
"path": "samples/README.md",
"chars": 1749,
"preview": "# Open source MCP servers for AWS - Samples\n\nThis directory contains a collection of examples demonstrating how to use t"
},
{
"path": "samples/mcp-integration-with-kb/.python-version",
"chars": 5,
"preview": "3.12\n"
},
{
"path": "samples/mcp-integration-with-kb/README.md",
"chars": 3187,
"preview": "# MCP Integration with Amazon Bedrock Knowledge Bases\n\nThis repository outlines a basic implementation of the [Model Con"
},
{
"path": "samples/mcp-integration-with-kb/clients/client_server.py",
"chars": 9925,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "samples/mcp-integration-with-kb/pyproject.toml",
"chars": 515,
"preview": "[project]\nname = \"mcp-integration-with-kb\"\nversion = \"0.1.0\"\ndescription = \"An implementation of the Model Context Proto"
},
{
"path": "samples/mcp-integration-with-kb/user_interfaces/chat_bedrock_st.py",
"chars": 5680,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "samples/mcp-integration-with-nova-canvas/.python-version",
"chars": 5,
"preview": "3.12\n"
},
{
"path": "samples/mcp-integration-with-nova-canvas/README.md",
"chars": 2922,
"preview": "# MCP Integration with Amazon Nova Canvas\n\nThis repository outlines a basic implementation of the [Model Context Protoco"
},
{
"path": "samples/mcp-integration-with-nova-canvas/clients/client_server.py",
"chars": 12821,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "samples/mcp-integration-with-nova-canvas/pyproject.toml",
"chars": 491,
"preview": "[project]\nname = \"mcp-integration-with-nova-canvas\"\nversion = \"0.1.0\"\ndescription = \"An implementation of the Model Cont"
},
{
"path": "samples/mcp-integration-with-nova-canvas/user_interfaces/image_generator_st.py",
"chars": 10561,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "samples/stepfunctions-tool-mcp-server/README.md",
"chars": 3155,
"preview": "# MCP Server Sample State Machines\n\nThis directory contains sample Step Functions state machines that demonstrate differ"
},
{
"path": "samples/stepfunctions-tool-mcp-server/sample_state_machines/customer-create/app.py",
"chars": 3017,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "samples/stepfunctions-tool-mcp-server/sample_state_machines/customer-id-from-email/app.py",
"chars": 1665,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "samples/stepfunctions-tool-mcp-server/sample_state_machines/customer-info-from-id/app.py",
"chars": 2777,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "samples/stepfunctions-tool-mcp-server/sample_state_machines/template.yml",
"chars": 7639,
"preview": "AWSTemplateFormatVersion: '2010-09-09'\nTransform: AWS::Serverless-2016-10-31\nDescription: Sample functions for MCP serve"
},
{
"path": "scripts/README.md",
"chars": 1789,
"preview": "# Scripts\n\nThis directory contains utility scripts for the MCP project.\n\n## verify_package_name.py\n\nA Python script that"
},
{
"path": "scripts/verify_awslabs_init.py",
"chars": 2824,
"preview": "#!/usr/bin/env uv run --script\n# /// script\n# requires-python = \">=3.12\"\n# dependencies = [\n# \"click>=8.1.8\",\n# "
},
{
"path": "scripts/verify_package_name.py",
"chars": 12801,
"preview": "#!/usr/bin/env python3\n# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apach"
},
{
"path": "scripts/verify_tool_names.py",
"chars": 14490,
"preview": "#!/usr/bin/env python3\n# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apach"
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/.gitignore",
"chars": 482,
"preview": "# Python\n__pycache__/\n*.py[cod]\n*$py.class\n*.so\n.Python\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib/\nlib64/\np"
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/.python-version",
"chars": 5,
"preview": "3.10\n"
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/CHANGELOG.md",
"chars": 621,
"preview": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Change"
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/Dockerfile",
"chars": 3209,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/LICENSE",
"chars": 10142,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/NOTICE",
"chars": 111,
"preview": "awslabs.amazon-bedrock-agentcore-mcp-server\nCopyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n"
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/README.md",
"chars": 10763,
"preview": "# AWS Bedrock AgentCore MCP Server\n\nModel Context Protocol (MCP) server for Amazon Bedrock AgentCore services\n\nThis MCP "
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/SECURITY.md",
"chars": 602,
"preview": "# Reporting Security Issues\n\nAmazon Web Services (AWS) is dedicated to the responsible disclosure of security vulnerabil"
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/awslabs/__init__.py",
"chars": 796,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/__init__.py",
"chars": 690,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/config.py",
"chars": 1814,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/server.py",
"chars": 6131,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/__init__.py",
"chars": 651,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/__init__.py",
"chars": 3003,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/browser_client.py",
"chars": 1723,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/connection_manager.py",
"chars": 9544,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/error_handler.py",
"chars": 2682,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/interaction.py",
"chars": 19745,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/management.py",
"chars": 10409,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/models.py",
"chars": 2472,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
},
{
"path": "src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/navigation.py",
"chars": 5997,
"preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 "
}
]
// ... and 3193 more files (download for full content)
About this extraction
This page contains the full source code of the awslabs/mcp GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3393 files (34.7 MB), approximately 9.3M tokens, and a symbol index with 25967 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.