Skip to main content
Glama
getsuga-tenshou

AWS Infrastructure MCP Server

AWS Infrastructure MCP Server

Un servidor FastMCP local (Python 3.12+, transporte stdio) que expone herramientas de diagnóstico de AWS para aplicaciones serverless directamente a los agentes de IA del IDE. Conecta Cursor, VS Code Copilot o Claude Code con CloudWatch, Lambda, DynamoDB, IAM y Bedrock a través del Model Context Protocol.

Arquitectura y decisiones de diseño

Transporte y pila tecnológica

Componente

Elección

Runtime

Python 3.12+

Framework MCP

FastMCP 3.x

Gestor de paquetes

uv

SDK de AWS

boto3

Validación de esquemas

Pydantic 2.x

Transporte

stdio (el IDE inicia el proceso del servidor)

Autenticación

Utiliza la cadena de credenciales predeterminada de boto3 sin lógica de autenticación personalizada. La cadena verifica, en orden: variables de entorno (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) → ~/.aws/credentials~/.aws/config → metadatos de instancia. Establezca AWS_PROFILE para apuntar a un perfil específico.

Superficie de herramientas

15 herramientas en 4 módulos:

CloudWatch y Lambda — Diagnóstico de servicios (tools/cloudwatch.py, tools/lambda_ops.py)

Herramienta

Descripción

list_lambdas(prefix?)

Lista funciones Lambda, opcionalmente filtradas por prefijo de nombre

get_lambda_logs(function_name, minutes=15)

Obtiene eventos de registro recientes de CloudWatch para el grupo de registros de una Lambda

get_lambda_errors(function_name, minutes=60)

Filtra eventos de registro solo a líneas de ERROR/excepción/Traceback

get_lambda_metrics(function_name, period=300)

Recupera métricas de invocaciones, errores, duración y limitaciones (throttle)

invoke_lambda(function_name, payload)

Invocación síncrona (RequestResponse); la respuesta se trunca y se limpia

DynamoDB — Salud de los datos (tools/dynamodb.py)

Herramienta

Descripción

list_tables(prefix?)

Lista tablas de DynamoDB, opcionalmente filtradas por prefijo de nombre

describe_table(table_name)

Devuelve esquema de clave, atributos, GSIs, recuento de elementos, tamaño, estado

query_table(table_name, key_condition, limit=10)

Consulta por condición de clave primaria; límite máximo de 25 elementos

scan_table(table_name, filter_expression?, limit=10)

Escaneo con filtro opcional; límite máximo de 25 elementos

get_table_metrics(table_name, period=300)

Consulta CloudWatch para ReadThrottleEvents, WriteThrottleEvents, UserErrors

IAM — Gobernanza de seguridad (tools/iam.py)

Herramienta

Descripción

list_roles(prefix?)

Lista roles de IAM, opcionalmente filtrados por prefijo de nombre

get_role_policy(role_name)

Devuelve la política de confianza y todos los documentos de políticas adjuntos o integrados

list_lambda_roles()

Asigna cada función Lambda a su ARN de rol de ejecución

validate_least_privilege(role_name)

Señala tres patrones de alto riesgo (ver más abajo)

validate_least_privilege verifica:

  1. Permisos comodín — declaraciones con "Action": "*" o "Resource": "*"

  2. Políticas administradas peligrosasAdministratorAccess o PowerUserAccess adjuntas

  3. Acceso a datos sin alcance — acciones de lectura/escritura de S3 o DynamoDB sin ARNs de recursos específicos

Bedrock — Análisis de causa raíz con IA (tools/bedrock.py)

Herramienta

Descripción

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

Envía contexto de diagnóstico a Bedrock; devuelve un análisis estructurado

Acepta texto sin procesar (registros, trazas de pila, resúmenes de métricas). Devuelve un objeto Pydantic validado:

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

El parámetro model_id acepta cualquier modelo disponible en Bedrock (por ejemplo: meta.llama3-2-3b).

Límite de seguridad

  • Todas las herramientas son de solo lectura excepto invoke_lambda (solo invocación síncrona).

  • Ninguna herramienta crea, actualiza o elimina funciones Lambda, elementos de DynamoDB, políticas de IAM ni ningún otro recurso de AWS.

  • Un limpiador de credenciales global (utils/scrubber.py) redacta los ID de clave de acceso de AWS, las claves de acceso secretas y los tokens de sesión de todas las salidas de las herramientas antes de que los datos lleguen al contexto del LLM. Se aplica a mensajes de registro, respuestas de invocación y salidas de error.

Estructura del proyecto

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

Instalación y configuración local

Requisitos previos:

  • Python 3.12+

  • uv gestor de paquetes

  • AWS CLI configurado (~/.aws/credentials o variables de entorno)

# Clone and install dependencies
cd mcpserver
uv sync

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

Configuración del IDE

VS Code / Cursor

Cree .vscode/mcp.json en la raíz del proyecto:

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

Reemplace /absolute/path/to/mcpserver con la ruta real a este directorio. En Windows, use barras diagonales (C:/Users/.../mcpserver).

Claude Desktop

Agregue a claude_desktop_config.json:

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

Estrategia de pruebas

Las pruebas utilizan un diseño de un solo punto de integración: cada función @mcp.tool() se prueba en su límite público con boto3 simulado debajo mediante unittest.mock.patch. Las pruebas verifican la lógica de transformación de la herramienta — filtrado de registros, aplicación del límite máximo, limpieza de credenciales, validación de Pydantic — sin requerir credenciales de AWS reales ni realizar llamadas de red.

57 pruebas unitarias en 6 archivos de prueba:

# 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