Skip to main content
Glama
getsuga-tenshou

AWS Infrastructure MCP Server

AWS Infrastructure MCP Server

Ein lokaler FastMCP-Server (Python 3.12+, stdio-Transport), der AWS-Diagnosetools für serverlose Anwendungen direkt für KI-Agenten in IDEs bereitstellt. Er verbindet Cursor, VS Code Copilot oder Claude Code über das Model Context Protocol mit CloudWatch, Lambda, DynamoDB, IAM und Bedrock.

Architektur & Designentscheidungen

Transport & Stack

Komponente

Wahl

Laufzeit

Python 3.12+

MCP-Framework

FastMCP 3.x

Paketmanager

uv

AWS-SDK

boto3

Schema-Validierung

Pydantic 2.x

Transport

stdio (die IDE startet den Serverprozess)

Authentifizierung

Verwendet die Standard-Anmeldeinformationskette von boto3 ohne benutzerdefinierte Authentifizierungslogik. Die Kette prüft in dieser Reihenfolge: Umgebungsvariablen (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) → ~/.aws/credentials → ~/.aws/config → Instanzmetadaten. Setzen Sie AWS_PROFILE, um ein bestimmtes benanntes Profil zu verwenden.

Tool-Oberfläche

15 Tools in 4 Modulen:

CloudWatch & Lambda — Servicediagnose (tools/cloudwatch.py, tools/lambda_ops.py)

Tool

Beschreibung

list_lambdas(prefix?)

Lambda-Funktionen auflisten, optional nach Namenspräfix gefiltert

get_lambda_logs(function_name, minutes=15)

Aktuelle CloudWatch-Logereignisse für die Log-Gruppe einer Lambda-Funktion abrufen

get_lambda_errors(function_name, minutes=60)

Logereignisse nur auf ERROR-/Exception-/Traceback-Zeilen filtern

get_lambda_metrics(function_name, period=300)

Metriken für Aufrufe, Fehler, Dauer und Drosselung abrufen

invoke_lambda(function_name, payload)

Synchroner Aufruf (RequestResponse); die Antwort wird gekürzt und bereinigt

DynamoDB — Datenzustand (tools/dynamodb.py)

Tool

Beschreibung

list_tables(prefix?)

DynamoDB-Tabellen auflisten, optional nach Namenspräfix gefiltert

describe_table(table_name)

Schlüsselschema, Attribute, GSIs, Elementanzahl, Größe und Status zurückgeben

query_table(table_name, key_condition, limit=10)

Abfrage nach Primärschlüsselbedingung; hart auf 25 Elemente begrenzt

scan_table(table_name, filter_expression?, limit=10)

Scan mit optionalem Filter; hart auf 25 Elemente begrenzt

get_table_metrics(table_name, period=300)

CloudWatch nach ReadThrottleEvents, WriteThrottleEvents und UserErrors abfragen

IAM — Sicherheits-Governance (tools/iam.py)

Tool

Beschreibung

list_roles(prefix?)

IAM-Rollen auflisten, optional nach Namenspräfix gefiltert

get_role_policy(role_name)

Vertrauensrichtlinie und alle angehängten/Inline-Richtliniendokumente zurückgeben

list_lambda_roles()

Jede Lambda-Funktion ihrer Ausführungsrollen-ARN zuordnen

validate_least_privilege(role_name)

Drei Hochrisikomuster kennzeichnen (siehe unten)

validate_least_privilege prüft:

  1. Wildcard-Berechtigungen — Anweisungen mit "Action": "*" oder "Resource": "*"

  2. Gefährliche verwaltete Richtlinien — AdministratorAccess oder PowerUserAccess angehängt

  3. Unbegrenzter Datenzugriff — S3- oder DynamoDB-Lese-/Schreibaktionen ohne spezifische Ressourcen-ARNs

Bedrock — KI-Ursachenanalyse (tools/bedrock.py)

Tool

Beschreibung

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

Diagnosekontext an Bedrock senden; liefert eine strukturierte Analyse

Akzeptiert Rohtext (Logs, Stack-Traces, Metrikzusammenfassungen). Gibt ein validiertes Pydantic-Objekt zurück:

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

Der Parameter model_id akzeptiert jedes in Bedrock verfügbare Modell (zum Beispiel: meta.llama3-2-3b).

Sicherheitsgrenze

  • Alle Tools sind schreibgeschützt, außer invoke_lambda (nur synchroner Aufruf).

  • Kein Tool erstellt, aktualisiert oder löscht Lambda-Funktionen, DynamoDB-Elemente, IAM-Richtlinien oder andere AWS-Ressourcen.

  • Ein globaler Anmeldeinformations-Bereiniger (utils/scrubber.py) schwärzt AWS-Zugriffsschlüssel-IDs, geheime Zugriffsschlüssel und Sitzungstoken aus allen Tool-Ausgaben, bevor Daten den LLM-Kontext erreichen. Angewendet auf Logmeldungen, Aufrufantworten und Fehlerausgaben.

Related MCP server: AWS MCP Server

Projektstruktur

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

Installation & lokale Einrichtung

Voraussetzungen:

  • Python 3.12+

  • Paketmanager uv

  • AWS-CLI konfiguriert (~/.aws/credentials oder Umgebungsvariablen)

# Clone and install dependencies
cd mcpserver
uv sync

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

IDE-Konfiguration

VS Code / Cursor

Erstellen Sie .vscode/mcp.json im Projektstammverzeichnis:

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

Ersetzen Sie /absolute/path/to/mcpserver durch den tatsächlichen Pfad zu diesem Verzeichnis. Verwenden Sie unter Windows Schrägstriche (C:/Users/.../mcpserver).

Claude Desktop

Fügen Sie zu claude_desktop_config.json hinzu:

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

Teststrategie

Die Tests verwenden ein Single-Seam-Design: Jede @mcp.tool()-Funktion wird an ihrer öffentlichen Grenze getestet, wobei boto3 darunter mit unittest.mock.patch gemockt wird. Die Tests verifizieren die Transformationslogik des Tools — Logfilterung, Durchsetzung der harten Obergrenze, Bereinigung von Anmeldeinformationen, Pydantic-Validierung — ohne dass Live-AWS-Anmeldeinformationen erforderlich sind oder Netzwerkaufrufe getätigt werden.

57 Unit-Tests in 6 Testdateien:

# Run the full suite
uv run pytest

# Run a single cluster's tests
uv run pytest tests/test_iam.py -v

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables management and provisioning of AWS resources like EC2, S3, and RDS using natural language prompts through the Model Context Protocol. It allows users to automate complex infrastructure tasks, such as setting up VPCs and security groups, via a chat interface.
    54
    11 npm
    27
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A read-only Model Context Protocol server that exposes over 60 AWS tools across services like EC2, S3, and IAM for AI agent interaction. It features multi-region support, resource caching, and audit logging to provide secure, AI-ready access to AWS infrastructure data.
    100 npm
    ISC
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with AWS services (EC2, S3, Lambda, DynamoDB, etc.) through the Model Context Protocol, allowing natural language management of cloud resources.
    2
    -