Skip to main content
Glama
getsuga-tenshou

AWS Infrastructure MCP Server

AWS Infrastructure MCP Server

Локальный сервер FastMCP (Python 3.12+, транспорт stdio), который предоставляет диагностические инструменты AWS для бессерверных приложений напрямую IDE-агентам на базе ИИ. Он подключает Cursor, VS Code Copilot или Claude Code к CloudWatch, Lambda, DynamoDB, IAM и Bedrock через Model Context Protocol.

Архитектура и проектные решения

Транспорт и стек

Компонент

Выбор

Среда выполнения

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, чтобы выбрать конкретный именованный профиль.

Набор инструментов

15 инструментов в 4 модулях:

CloudWatch и Lambda — диагностика сервисов (tools/cloudwatch.py, tools/lambda_ops.py)

Инструмент

Описание

list_lambdas(prefix?)

Список функций Lambda, опционально отфильтрованных по префиксу имени

get_lambda_logs(function_name, minutes=15)

Получение последних событий журнала CloudWatch для группы журналов Lambda

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. Wildcard-разрешения — операторы с "Action": "*" или "Resource": "*"

  2. Опасные управляемые политики — прикреплены AdministratorAccess или PowerUserAccess

  3. Неограниченный доступ к данным — операции чтения/записи S3 или DynamoDB без конкретных ARN ресурсов

Bedrock — ИИ-анализ первопричин (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) маскирует идентификаторы ключей доступа AWS, секретные ключи доступа и токены сессий во всех выходных данных инструментов, прежде чем данные попадут в контекст LLM. Применяется к сообщениям журналов, ответам на вызовы и выводам ошибок.

Структура проекта

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() тестируется на её публичной границе, а boto3 под ней мокируется с помощью unittest.mock.patch. Тесты проверяют логику преобразования инструментов — фильтрацию журналов, соблюдение жёстких лимитов, очистку учётных данных, валидацию Pydantic — без необходимости в реальных учётных данных AWS и без сетевых вызовов.

57 модульных тестов в 6 тестовых файлах:

# 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