Skip to main content
Glama
getsuga-tenshou

AWS Infrastructure MCP Server

AWS Infrastructure MCP Server

서버리스 애플리케이션을 위한 AWS 진단 도구를 IDE AI 에이전트에 직접 노출하는 로컬 FastMCP 서버(Python 3.12+, stdio 전송)입니다. Model Context Protocol을 통해 Cursor, VS Code Copilot 또는 Claude Code를 CloudWatch, Lambda, DynamoDB, IAM, Bedrock에 연결합니다.

아키텍처 및 설계 선택

전송 및 스택

구성 요소

선택

런타임

Python 3.12+

MCP 프레임워크

FastMCP 3.x

패키지 관리자

uv

AWS SDK

boto3

스키마 검증

Pydantic 2.x

전송

stdio (IDE가 서버 프로세스를 생성함)

인증

boto3의 기본 자격 증명 체인을 사용하며 사용자 지정 인증 로직이 없습니다. 체인은 다음 순서로 확인합니다: 환경 변수(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) → ~/.aws/credentials~/.aws/config → 인스턴스 메타데이터. 특정 명명된 프로필을 대상으로 하려면 AWS_PROFILE을 설정하세요.

도구 표면

4개 모듈에 걸친 15개 도구:

CloudWatch 및 Lambda — 서비스 진단 (tools/cloudwatch.py, tools/lambda_ops.py)

도구

설명

list_lambdas(prefix?)

Lambda 함수를 나열하며, 이름 접두사로 선택적으로 필터링합니다.

get_lambda_logs(function_name, minutes=15)

Lambda 로그 그룹에서 최근 CloudWatch 로그 이벤트를 가져옵니다.

get_lambda_errors(function_name, minutes=60)

로그 이벤트를 ERROR/exception/Traceback 줄만 필터링합니다.

get_lambda_metrics(function_name, period=300)

호출, 오류, 지속 시간, 스로틀 지표를 검색합니다.

invoke_lambda(function_name, payload)

동기 호출(RequestResponse)을 수행하며, 응답은 잘리고 스크러빙됩니다.

DynamoDB — 데이터 상태 (tools/dynamodb.py)

도구

설명

list_tables(prefix?)

DynamoDB 테이블을 나열하며, 이름 접두사로 선택적으로 필터링합니다.

describe_table(table_name)

키 스키마, 속성, GSI, 항목 수, 크기, 상태를 반환합니다.

query_table(table_name, key_condition, limit=10)

기본 키 조건으로 쿼리하며, 최대 25개 항목으로 하드 제한됩니다.

scan_table(table_name, filter_expression?, limit=10)

선택적 필터로 스캔하며, 최대 25개 항목으로 하드 제한됩니다.

get_table_metrics(table_name, period=300)

CloudWatch에서 ReadThrottleEvents, WriteThrottleEvents, UserErrors를 쿼리합니다.

IAM — 보안 거버넌스 (tools/iam.py)

도구

설명

list_roles(prefix?)

IAM 역할을 나열하며, 이름 접두사로 선택적으로 필터링합니다.

get_role_policy(role_name)

신뢰 정책과 모든 연결/인라인 정책 문서를 반환합니다.

list_lambda_roles()

각 Lambda 함수를 해당 실행 역할 ARN에 매핑합니다.

validate_least_privilege(role_name)

세 가지 고위험 패턴에 플래그를 지정합니다(아래 참조).

validate_least_privilege는 다음을 확인합니다:

  1. 와일드카드 권한"Action": "*" 또는 "Resource": "*"가 포함된 문

  2. 위험한 관리형 정책AdministratorAccess 또는 PowerUserAccess가 연결된 경우

  3. 범위가 지정되지 않은 데이터 액세스 — 특정 리소스 ARN 없이 S3 또는 DynamoDB 읽기/쓰기 작업을 수행하는 경우

Bedrock — AI 근본 원인 분석 (tools/bedrock.py)

도구

설명

analyze_incident(context, model_id="amazon.nova-micro-v1:0")

진단 컨텍스트를 Bedrock에 전송하고 구조화된 분석을 반환합니다.

원시 텍스트(로그, 스택 트레이스, 지표 요약)를 받아들입니다. 검증된 Pydantic 객체를 반환합니다:

class IncidentAnalysis(BaseModel):
    severity: Literal["LOW", "MEDIUM", "HIGH", "CRITICAL"]
    root_cause_summary: str
    affected_components: list[str]
    recommended_fix: str

model_id 매개변수는 Bedrock에서 사용 가능한 모든 모델을 허용합니다(예: meta.llama3-2-3b).

보안 경계

  • invoke_lambda(동기 호출만 해당)를 제외한 모든 도구는 읽기 전용입니다.

  • 어떤 도구도 Lambda 함수, DynamoDB 항목, IAM 정책 또는 기타 AWS 리소스를 생성, 업데이트, 삭제하지 않습니다.

  • 전역 자격 증명 스크러버(utils/scrubber.py)는 데이터가 LLM 컨텍스트에 도달하기 전에 모든 도구 출력에서 AWS 액세스 키 ID, 시크릿 액세스 키, 세션 토큰을 삭제합니다. 로그 메시지, 호출 응답, 오류 출력에 적용됩니다.

프로젝트 구조

mcpserver/
├── app.py                 # FastMCP instance (single shared object)
├── server.py              # Entry point — imports tool modules, runs stdio
├── tools/
│   ├── __init__.py
│   ├── cloudwatch.py      # get_lambda_logs, get_lambda_errors, get_lambda_metrics
│   ├── lambda_ops.py      # list_lambdas, invoke_lambda
│   ├── dynamodb.py        # list_tables, describe_table, query_table, scan_table, get_table_metrics
│   ├── iam.py             # list_roles, get_role_policy, validate_least_privilege, list_lambda_roles
│   └── bedrock.py         # analyze_incident + IncidentAnalysis schema
├── utils/
│   ├── __init__.py
│   └── scrubber.py        # Credential redaction regex patterns
├── tests/
│   ├── test_scrubber.py
│   ├── test_cloudwatch.py
│   ├── test_lambda_ops.py
│   ├── test_dynamodb.py
│   ├── test_iam.py
│   └── test_bedrock.py
├── pyproject.toml
└── uv.lock

설치 및 로컬 설정

전제 조건:

  • Python 3.12+

  • uv 패키지 관리자

  • AWS CLI 구성 (~/.aws/credentials 또는 환경 변수)

# Clone and install dependencies
cd mcpserver
uv sync

# Run the server locally (stdio)
uv run python server.py

IDE 구성

VS Code / Cursor

프로젝트 루트에 .vscode/mcp.json을 생성하세요:

{
  "servers": {
    "aws-infra-mcp": {
      "type": "stdio",
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/mcpserver", "run", "server.py"]
    }
  }
}

/absolute/path/to/mcpserver를 이 디렉터리의 실제 경로로 바꾸세요. Windows에서는 슬래시(C:/Users/.../mcpserver)를 사용하세요.

Claude Desktop

claude_desktop_config.json에 추가하세요:

{
  "mcpServers": {
    "aws-infra-mcp": {
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/mcpserver", "run", "server.py"]
    }
  }
}

테스트 전략

테스트는 단일 결합 지점(single-seam) 설계를 사용합니다. 각 @mcp.tool() 함수는 unittest.mock.patch를 사용하여 그 아래의 boto3를 모의 처리한 상태에서 공개 경계에서 테스트됩니다. 테스트는 도구의 변환 로직(로그 필터링, 하드 캡 적용, 자격 증명 스크러빙, Pydantic 검증)을 검증하며, 실제 AWS 자격 증명이나 네트워크 호출이 필요하지 않습니다.

6개 테스트 파일에 걸친 57개의 단위 테스트:

# Run the full suite
uv run pytest

# Run a single cluster's tests
uv run pytest tests/test_iam.py -v
-
license - not tested
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/getsuga-tenshou/mcpserver'

If you have feedback or need assistance with the MCP directory API, please join our Discord server