Skip to main content
Glama
tahanadeem125

CloudWatch MCP Server

CloudWatch MCP Server

Собственный MCP сервер на базе FastMCP, который предоставляет метрики Amazon CloudWatch, Logs Insights и сигналы тревоги как инструменты, доступные ИИ-ассистенту. Он рассчитан на локальный запуск в разработке и на развёртывание на AWS Lambda в виде образа контейнера, доступ к которому открывается через Lambda Function URL.

Протестировано с fastmcp==3.4.7 и boto3 на моках moto (все перечисленные ниже инструменты прогонялись против мока вызовов CloudWatch/Logs). Зафиксируйте свою версию fastmcp в requirements.txt перед развёртыванием и сверьте этот README с gofastmcp.com, если с момента последней проверки прошло время — API FastMCP уже не раз менял свою форму (см. раздел «Заметка о меняющемся API FastMCP» ниже).

Доступные инструменты

Инструмент

Описание

list_metrics

Поиск доступных метрик по namespace/имени/измерению

get_metric_data

Получение точек временного ряда для одной метрики

list_log_groups

Вывод списка групп журналов CloudWatch, опционально по префиксу

query_logs

Выполнение запроса Logs Insights и ожидание результатов

list_alarms

Вывод списка сигналов тревоги, опционально фильтруя по состоянию

get_alarm_history

Получение истории изменения состояния одного сигнала тревоги

Все инструменты только для чтения — ни один из них не может изменять, удалять или создавать что-либо в CloudWatch. Оставляйте всё так, если только не появится конкретная причина добавить право на запись; принцип минимальных привилегий становится о гораздо более важным, когда решение о том, когда вызывать такие инструменты, принимает ИИ-модель.

Related MCP server: cloudwatch-mcp

1. Сначала запустите локально

Это самый быстрый способ убедиться, что инструменты работают, прежде чем вообще касаться развёртывания в AWS.

python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt

# Uses your normal AWS credentials (aws configure / AWS_PROFILE / SSO)
export AWS_PROFILE=your-profile
export AWS_REGION=us-east-1

python3 server.py   # defaults to stdio transport

Направьте MCP-клиент (Claude Desktop, Claude Code и т.п.) на эту команду напрямую — для Claude Desktop добавьте её в конфигурацию MCP:

{
  "mcpServers": {
    "cloudwatch": {
      "command": "/full/path/to/.venv/bin/python3",
      "args": ["/full/path/to/server.py"],
      "env": { "AWS_PROFILE": "your-profile", "AWS_REGION": "us-east-1" }
    }
  }
}

Чтобы проверить HTTP-транспорт локально (именно этот режимом используется на Lambda):

MCP_TRANSPORT=http PORT=8080 python3 server.py
# then, from another terminal:
curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

2. IAM: что серверу можно трогать

iam-policy.json в этой папке — минимальный набор правых серверу: GetMetricData/ListMetrics/DescribeAlarms* for CloudWatch, DescribeLogGroups/StartQuery/GetQueryResults/StopQuery — для Logs Insights. Больше ничего. Приныпройте его к тому identity, под которым работает сервер:

  • Локально: приныните его к IAM-пользователю/роли и используйте через AWS_PROFILE или выдайте его искомой SSO-роли.

  • На легко: прикрепите его к роли выполнения функции Lambda (плюс стандартной AWSLambdaBasicExecutionRole для логирования самой функции) — никогда не зашивайте ключи доступа в образ.

3. Развёртывание на AВаваLambda

Рекомендуемое самим CloudWatch для «выставить существующую функцию наружу как MCP-инструмент, не вспылая протокольный код» — это Amazon Bedrock AgentCore Gateway — направление, наРазwe worthпосмотреть: сервер без повода есть. Применитель — когда полностью управляемый вариант станет приемлемым позже. Внизу описан именно буквальный путь «мы волимнуем MCP-сервер», с использованием AWS Lambda Web Adapter, чтобы позволить вот этому точно приложению FastMCP работать в ler Lambda без изменений.

Соберите и залейте образ контейтента

aws ecr create-repository --repository-name cloudwatch-mcp-server

aws ecr get-login-password --region <region> | \
  docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com

docker build -t cloudwatch-mcp-server .
docker tag cloudwatch-mcp-server:latest \
  <account-id>.dkr.ecr.<region>.amazonaws.com/cloudwatch-mcp-server:latest
docker push <account-id>.dkr.ecr.<region>.amazonaws.com/cloudwatch-mcp-server:latest

Создайте ж функция Lambda

  1. Создайте функцию из образа, который вы только чтоцентрализовали.

  2. Память: начните с 512 МБ; таймаут: 30 с достаточно для большинства запросов к метрикам/сигналамотпов, поднимите до 60–120 с, если ваши Logs Insights-запросы крупные (max_wait_seconds у query_logs должен с запасом вписываться в таймаут функции).

  3. Прикрепите роль выполнения с IAM-политикой из пункта 2.

  4. Выставьте режим вызова в RESPONSE_STREAM,раз если включили стриминг для Function URL (нужно, чтобы адаптер мог отрпавить длинные ответы).

  5. Создайте Function URL:

    • Тип аутентификации: AWS_IAM ( не используйте NONE вне quick личного теста — это оет ваши сдельные данные KGS доступными для кого угодно по URL).

    • Вашему MCP-клиенту придётся подписывать заппросы SigV4, чтобы сделать вызов; большинство MCP-клиентов пока это нативно не умеют, так что на практике обычно это стоит за тем, что умеет подписывать запросы — например, внутренний шлюз/прокси вашей команды или API Gateway с IAM-аутентификацией перед Function URL, а не за прямой IAM-аутентификацией самого Function URL.

  6. MCP-эндпоинт будет https://<function-url>/mcp.

Быстрая проверка развёрнутой функции

aws lambda invoke --function-name cloudwatch-mcp-server \
  --payload '{}' /tmp/out.json && cat /tmp/out.json

и затем настоящий вызов MCP initialize против Function URL — с подписью SigV4, например через awscurl или небольшой скрипт подписанного запроса — тот же JSON-тело, что и в локальном curl-тесте выше.

4. Известные шероховатости (честно скажите о них вашей команде)

  • Холодные старты: полный HTTP-сервер (uvicorn + FastMCP), поднимающийся внутри холодного старта Lambda, медленнее типинного легкого обработчика Lambda — ожидайте лтентности несколько секунд на первом вызове после бездействия. If это важно, см будет смягчено Provisioned Concurrency.

  • Лэники/нет долгоживущей системы: stable обычных HTTP stateless_http=True означает, что каждый запрос — с ручными и сам до себя: между вызовами ничего не сохраняется, и сервер клиента сам не может пушить. Выстраивайте инструменты так, чтобы каждый вызов нёс в себе все нужное — сервер уже готов правильные примеры: query_logs принимает полный диапазон времени и текста запроса одним выйзов.

  • Аутентификация — ваша зона ответственности: IAM-аутентификация Function URL — единственная преграда между «AI UI» и любым, у кого есть URL. Не пренебрегайте ею даже на раннем отладческом этап: функция может никогда не быть касается какого-либо не одноразового аккаунта-песочницы.

  • Запросы Logs Insights — это поллинг, а не push: query_logs блокирует выполнение и опрашивает get-gate_results() до предельного max_wait_seconds. Для очень объёмных запросов это может занять время в Lambda timeout — держите запросы ограниченными (limit, узкие временные интервал), а не сильно открытыми.

5. Заметка о меняющемся API FastMCP

FastMCP в разных версиях не раз менял свой HTTP/статечный API (флат stateless_http в различных релизах перебирался между конструктором FastMCP() и mcp.run()/более — mcp.http_flags()). Код в server.py валидировался против fastmcp==3.4.7 (mcp.run(transport="http", stateless_http=True, ...)). Если поднимите версию и что-то сломается в первую очередь сверьтесь с gofastmcp.com/deployment/http — скорее всего изменилось именно это.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to monitor and troubleshoot AWS Application Signals services by tracking service health, analyzing SLO compliance, querying CloudWatch metrics, and investigating issues using distributed tracing with AWS X-Ray.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to query AWS CloudWatch metrics, alarms, and logs read-only via MCP, providing rapid health snapshots and triage without console navigation.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants read-only access to Sprinklr data via MCP, allowing querying reports, searching cases, and calling Sprinklr API endpoints.
    8 npm
    ISC