datadog-aws-mcp
Allows querying Datadog monitors and recent error logs, and grouping recurring errors by fingerprint.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@datadog-aws-mcpCheck Datadog for triggered monitors and recent errors."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
datadog-aws-mcp
Servidor MCP de solo lectura que expone herramientas para consultar Datadog (monitores y logs), AWS CloudWatch Logs, y leer código fuente de Azure Repos (Azure DevOps) o GitHub — y para agrupar errores recurrentes por "fingerprint" (huella del mensaje de error).
Las 4 fuentes son independientes y 100% opcionales. No necesitas
configurarlas todas: activa solo las que uses, en cualquier combinación
— solo AWS, solo Datadog, solo Git (Azure Repos y/o GitHub), AWS+GitHub,
AWS+Datadog, las 4 juntas, etc. Cada herramienta que dependa de una
fuente no configurada devuelve un error claro explicando qué falta, en
vez de fallar de forma confusa; y find_recurring_errors simplemente
omite las fuentes no configuradas (lo reporta en su respuesta) en vez de
fallar por completo.
Está pensado para usarse junto con Claude Code: Claude consulta estas herramientas para diagnosticar qué está fallando, y luego usa sus capacidades normales de git (crear rama, editar código, commit, push, abrir PR) para proponer un fix — con revisión humana antes de mergear o desplegar.
Instalación
git clone https://github.com/edxmorales/datadog-aws-mcp.git
cd datadog-aws-mcp
pip install -r requirements.txt --break-system-packagesCrea tu archivo de variables de entorno a partir del ejemplo:
# macOS/Linux
cp .env.example .env
# Windows (PowerShell) — `cp` como en bash no siempre existe; usa:
Copy-Item .env.example .envEdita .env y activa solo las fuentes que vayas a usar (ver tabla
abajo) — ninguna es obligatoria por sí sola, pero necesitas al menos una
para que el servidor tenga algo que consultar.
Nota: si clonas el repo estando ya dentro de la carpeta destino (ej.
cd C:\Proyectos\mi-repoy luegogit clone ...ahí mismo), Git crea una subcarpeta anidada con el mismo nombre. Verifica condir/lsqueserver.pyyrequirements.txtestén en tu carpeta actual antes de instalar — si no, entra un nivel más concd datadog-aws-mcp.
Related MCP server: Datadog MCP Server
Fuentes: todas opcionales, cualquier combinación
Fuente | Variables en | Qué necesitas | Paso a paso |
Datadog |
| API Key + Application Key de Datadog | |
AWS CloudWatch |
| Credenciales AWS estándar ( | |
Azure Repos |
| PAT de Azure DevOps, scope "Code (Read)" | |
GitHub |
| Nada para repos públicos; PAT fine-grained "Contents: Read-only" para privados | |
DeepSeek |
| API key de DeepSeek (o de Groq si usas |
Deja vacías las variables de la fuente que no uses — el resto del servidor sigue funcionando igual. Combina las que quieras: por ejemplo solo AWS + GitHub (sin Datadog ni Azure), o solo Datadog, o las 4.
Herramientas expuestas
Herramienta | Fuente | Qué hace |
| Datadog | Monitores actualmente en Alert/Warn |
| Datadog | Logs de error recientes (por query) |
| AWS | Lista log groups de CloudWatch disponibles |
| AWS | Logs de error recientes en un log group |
| AWS | IPs públicas de salida (Elastic IP de los NAT Gateway) por VPC — requiere permisos extra de EC2, ver abajo |
| AWS | Lista ALB/NLB: nombre, tipo, DNS name, VPC — requiere permiso extra de ELB, ver abajo |
| Datadog + AWS | Combina las fuentes configuradas y agrupa errores repetidos |
| — (local) | Consulta si un error (por fingerprint) ya fue diagnosticado antes |
| — (local) | Registra diagnóstico + fix + resultado en el historial |
| — (local) | Lista el historial de incidentes registrados |
| Azure Repos | Lista proyectos de tu organización de Azure DevOps |
| Azure Repos | Lista repos Git dentro de un proyecto |
| Azure Repos | Lee el contenido de un archivo |
| Azure Repos | Busca texto/código (requiere extensión "Azure DevOps Search") |
| GitHub | Lista repos de un usuario/organización |
| GitHub | Lee el contenido de un archivo |
| GitHub | Busca texto/código (requiere |
| DeepSeek | Pregunta libre a DeepSeek — fallback si no tienes acceso a Claude |
| Claude + DeepSeek | Combina un análisis de Claude con una segunda opinión de DeepSeek si está configurado; si no, devuelve el análisis original sin fallar |
Ninguna herramienta escribe, borra ni modifica nada en Datadog, AWS,
Azure Repos ni GitHub — son de solo lectura a propósito. Las 3
herramientas de historial de incidentes sí escriben, pero solo en un
archivo local del propio MCP (incident_history.json), nunca en
Datadog/AWS/Azure/GitHub/tu repo.
Permisos extra para aws_network_egress_ips / aws_list_load_balancers:
el usuario/rol de AWS de tu .env solo trae CloudWatchLogsReadOnlyAccess
por defecto, y con eso AWS niega el acceso a estas dos herramientas
(EC2/ELB son servicios distintos). Para habilitarlas, agrégale además,
de solo lectura: ec2:DescribeNatGateways, ec2:DescribeAddresses,
ec2:DescribeVpcs y elasticloadbalancing:DescribeLoadBalancers — o,
más simple, las políticas administradas AmazonEC2ReadOnlyAccess y
ElasticLoadBalancingReadOnly. Sin esto, ambas herramientas devuelven
un error explicando exactamente qué falta.
Datadog (opcional)
Si quieres que Claude consulte monitores y logs de Datadog
(datadog_triggered_monitors, datadog_recent_errors), agrega estas
variables a tu .env:
DD_API_KEY=tu_api_key
DD_APP_KEY=tu_application_key
DD_SITE=datadoghq.comCómo conseguir cada una, paso a paso:
Entra a tu cuenta de Datadog con el usuario que ya usas normalmente.
API Key: menú Organization Settings → API Keys (directo:
https://app.datadoghq.com/organization-settings/api-keys) → botón New Key → ponle un nombre (ej.datadog-aws-mcp) → copia el valor generado aDD_API_KEY.Application Key: menú Organization Settings → Application Keys (directo:
https://app.datadoghq.com/organization-settings/application-keys) → New Key → mismo nombre → copia el valor aDD_APP_KEY. Una Application Key hereda los permisos del usuario que la crea, así que créala con un usuario que tenga solo permisos de lectura si tu cuenta de Datadog soporta roles granulares.DD_SITE: depende del dominio con el que entras a Datadog, no de dónde está tu infraestructura:Si entras por...
Usa
DD_SITE=app.datadoghq.comdatadoghq.com(US1 — el más común)app.datadoghq.eudatadoghq.euapp.us3.datadoghq.comus3.datadoghq.comapp.us5.datadoghq.comus5.datadoghq.comapp.ap1.datadoghq.comap1.datadoghq.comapp.ddog-gov.comddog-gov.com
Es completamente opcional y genérico — no está atado a ninguna
organización en particular. Si dejas DD_API_KEY/DD_APP_KEY vacíos,
datadog_triggered_monitors y datadog_recent_errors simplemente
devuelven un error explicando qué falta, y find_recurring_errors omite
la fuente Datadog en vez de fallar.
AWS CloudWatch (opcional)
AWS_REGION va en tu .env, pero las credenciales de AWS no van
ahí — este servidor usa boto3, que las toma del entorno estándar de
AWS (no de este archivo). Paso a paso para crear unas de solo lectura
desde cero:
En la Consola de AWS → IAM → Users → Create user (si no tienes permisos de IAM en tu cuenta, pide esto a quien la administre).
Ponle un nombre (ej.
mcp-cloudwatch-readonly) y en el paso de permisos elige "Attach policies directly" → busca y marca la política administradaCloudWatchLogsReadOnlyAccess. Si además quieres que funcionenaws_network_egress_ipsyaws_list_load_balancers, marca tambiénAmazonEC2ReadOnlyAccessyElasticLoadBalancingReadOnly(ver la nota de permisos extra más abajo).Crea el usuario → entra a su página de detalle → pestaña "Security credentials" → sección "Access keys" → Create access key → elige el caso de uso "Application running outside AWS" → al final copia el Access key ID y el Secret access key (este último solo se muestra una vez — guárdalo ya).
Configura esas dos credenciales en tu máquina, con una de estas opciones:
Corre
aws configureen tu terminal y pégalas cuando te las pida (junto con la región).Defínelas como variables de entorno del sistema:
AWS_ACCESS_KEY_IDyAWS_SECRET_ACCESS_KEY.Si tu Claude Desktop está instalado como app empaquetada de Windows (Microsoft Store/MSIX) y por eso no ve tu
~/.aws/credentials, defínelas directamente como variables adicionales en el.envde este proyecto.
En
.env, dejaAWS_REGION=apuntando a la región donde están tus log groups (ej.us-east-1).
Si dejas esto sin configurar, cloudwatch_list_log_groups y
cloudwatch_recent_errors simplemente devuelven un error explicando qué
falta, y find_recurring_errors omite la fuente CloudWatch en vez de
fallar.
Azure Repos (opcional)
Si el código fuente que Claude necesita leer para diagnosticar un error
vive en Azure Repos (Azure DevOps) en vez de GitHub, agrega estas dos
variables a tu .env:
AZURE_DEVOPS_ORG=tu_organizacion # el nombre en https://dev.azure.com/<org>
AZURE_DEVOPS_PAT=tu_personal_access_tokenEl PAT (Personal Access Token) se crea en
https://dev.azure.com/<tu-org>/_usersSettings/tokens con el scope de
solo lectura "Code (Read)" — nada más. Igual que con Datadog y AWS,
no le des permisos de escritura a este servidor.
Es completamente opcional y genérico: no está atado a ninguna
organización/proyecto/repo en particular, así que cualquiera que instale
este MCP lo apunta a su propia cuenta de Azure DevOps. Si dejas
AZURE_DEVOPS_ORG / AZURE_DEVOPS_PAT vacíos, el resto del servidor
sigue funcionando normal — esas 4 herramientas simplemente devuelven un
error explicando qué falta si Claude intenta usarlas.
Flujo típico: find_recurring_errors para detectar el error → si el
repo está en Azure DevOps, azure_devops_list_projects y
azure_repos_list_repos para ubicar dónde vive el código →
azure_repos_get_file (o azure_repos_search_code, si tu organización
tiene habilitada la extensión "Azure DevOps Search") para leer el
archivo relevante antes de proponer el fix.
GitHub (opcional)
Si el código fuente vive en GitHub en vez de (o además de) Azure
Repos, agrega a tu .env:
GITHUB_TOKEN=tu_personal_access_token # opcional para repos públicos
# GITHUB_API_URL=https://api.github.com # cambia solo si usas GitHub Enterprise ServerSin GITHUB_TOKEN, github_list_repos y github_get_file funcionan
igual pero limitados a repos públicos y con límites de rate más
bajos (la API de GitHub lo permite así). github_search_code sí exige
un token siempre — la Search API de GitHub no acepta búsquedas sin
autenticación, ni en repos públicos.
Para repos privados, crea un token fine-grained en
https://github.com/settings/tokens?type=beta con el scope de solo
lectura "Contents: Read-only" sobre los repos que necesites — nada
más. Igual que las demás fuentes, es completamente opcional y genérico:
no está atado a ningún usuario/organización en particular.
DeepSeek (opcional)
Quinta fuente, nunca obligatoria, con un propósito distinto a las otras cuatro: no lee observabilidad ni código, conecta con otro modelo de lenguaje (DeepSeek) para dos casos de uso:
Fallback (
ask_deepseek): si no tienes acceso a Claude en ese momento pero este MCP sigue corriendo, le haces una pregunta directa a DeepSeek. Esta sí requiereDEEPSEEK_API_KEY— sin ningún modelo configurado no hay respuesta que dar.Potenciar (
potenciar_respuesta): cuando tienes ambos modelos disponibles, le pasas a esta herramienta el análisis/diagnóstico que ya generó Claude (por ejemplo, trasfind_recurring_errors+github_get_file/azure_repos_get_file) y, siDEEPSEEK_API_KEYestá configurado, DeepSeek agrega su propia revisión — la respuesta queda potenciada por los dos modelos. Si no está configurado, esta herramienta no falla: devuelve el análisis de Claude tal cual, con una nota de que DeepSeek se omitió por ser opcional. Es segura de llamar siempre, esté o no DeepSeek disponible.
Agrega a tu .env (opcional):
DEEPSEEK_TIER=paid
DEEPSEEK_API_KEY=tu_api_keyConsigue tu API key en platform.deepseek.com/api_keys (requiere cuenta y crédito prepago — la API de DeepSeek no tiene capa gratuita, solo su web/app de chat, que no sirve aquí).
¿Y si no quiero pagar? — DEEPSEEK_TIER=free
Si prefieres no gastar nada, pon DEEPSEEK_TIER=free en tu .env. Esto
NO activa una capa gratuita de DeepSeek (no existe) — en su lugar, hace
que ask_deepseek y potenciar_respuesta llamen a Groq, que sí
tiene una capa gratuita real, usando el mismo formato de API. En este
modo, DEEPSEEK_API_KEY debe llevar tu key de Groq (créala gratis en
console.groq.com/keys), no una de
DeepSeek — el nombre de la variable se mantiene para no romper el resto
del código.
DEEPSEEK_TIER=free
DEEPSEEK_API_KEY=tu_api_key_de_groqSi quieres apuntar a un proveedor o modelo distinto en cualquiera de los
dos modos, define DEEPSEEK_API_URL/DEEPSEEK_MODEL explícitamente —
esos valores siempre tienen prioridad sobre el default de DEEPSEEK_TIER.
Si dejas DEEPSEEK_API_KEY vacío (en cualquier tier): ask_deepseek
deja de estar disponible (error claro si se intenta usar), pero
potenciar_respuesta y el resto del servidor siguen funcionando
exactamente igual.
Modo experto: el archivo PLAYBOOK.md
PLAYBOOK.md contiene las instrucciones que convierten esto en un
agente de triage nivel senior/experto, no un script ciego: diagnóstico
documentado antes de tocar código, clasificación explícita de la causa,
auto-revisión del propio fix, y memoria de incidentes pasados vía
check_known_incident / record_incident_resolution.
Pega el contenido de PLAYBOOK.md en el CLAUDE.md de tu repo (o
pásaselo como instrucción al inicio de la sesión de Claude Code) para
que Claude siga ese flujo por defecto.
Registrarlo en Claude Code / Claude Desktop
Copia el contenido de claude_mcp_config.example.json (la clave
mcpServers) al archivo de configuración de MCP que use tu instalación
de Claude Code/Desktop, y ajusta la ruta absoluta a server.py. Si el
archivo de configuración ya tiene contenido (otros servidores MCP, u
otras preferencias de la app), fusiona tu bloque mcpServers dentro
de lo que ya existe — no reemplaces el archivo completo.
Dónde está ese archivo — ojo con esto en Windows: el nombre y ruta exactos pueden variar según versión (revisa la doc oficial en docs.claude.com), pero además, si tu Claude Desktop está instalado como app empaquetada de Windows (Microsoft Store / MSIX — se ve como
Claude_<id-aleatorio>enAppData\Local\Packages), el archivo no está en el%APPDATA%\Claude\clásico, sino en una carpeta virtualizada tipo:C:\Users\<tu_usuario>\AppData\Local\Packages\Claude_<id>\LocalCache\Roaming\Claude\claude_desktop_config.jsonLa forma confiable de encontrarlo sin adivinar: dentro de la app, ve a Desarrollador → Servidores MCP locales → "Editar configuración" — ese botón abre el archivo real que la app está leyendo, y ahí puedes confirmar la ruta exacta.
Después de guardar el archivo, cierra Claude Desktop por completo (verifica que no quede el proceso corriendo en la bandeja del sistema — en PowerShell:
Stop-Process -Name "Claude" -Force) y vuelve a abrirlo para que cargue el servidor nuevo.
Una vez registrado, en Desarrollador → Servidores MCP locales deberías
ver datadog-aws-integration en estado running. En una sesión de
Claude Code (o Claude Desktop) podrías pedir algo como:
"Revisa
find_recurring_errorscon datadog_query='service:checkout status:error' y log_group='/aws/lambda/checkout-prod' de las últimas 24 horas. Si hay algún error que se repita 5+ veces y parezca originarse en nuestro código (no en un servicio externo), crea una ramafix/<descripcion-corta>, corrígelo, corre los tests, y abre un PR con la explicación del diagnóstico. No hagas merge ni despliegues."
Flujo recomendado de extremo a extremo
Disparo: un cron, un webhook de Datadog, o tú manualmente, inician una sesión de Claude Code.
Diagnóstico: Claude llama a
find_recurring_errorspara ver qué se repite y con qué frecuencia.Decisión: le indicas (o Claude decide según tus instrucciones) si el patrón corresponde a un bug de código del repo vs. un problema de infraestructura/datos externos.
Fix propuesto: Claude crea una rama, edita el código, corre tests localmente.
Revisión humana: Claude abre un Pull Request con el diagnóstico y el fix. Un humano revisa y aprueba.
Despliegue: lo dispara tu pipeline de CI/CD existente (GitHub Actions, GitLab CI, CodePipeline, etc.) tras el merge — no el MCP.
Seguridad
Usa credenciales de solo lectura en cada fuente que actives: AWS (rol/política read-only), Datadog (API/App key read-only), Azure DevOps (PAT scope "Code (Read)") y GitHub (token fine-grained "Contents: Read-only").
Nunca subas tu archivo
.envreal a git (ya debería estar en.gitignorede tu proyecto).El paso de despliegue automático queda deliberadamente fuera de este MCP; añádelo solo si tu equipo decide asumir ese riesgo, y hazlo con aprobaciones explícitas (ej. un "approve" manual en el PR o en el pipeline) en vez de un despliegue directo sin supervisión.
Contribuir
Este proyecto está en etapa temprana y las contribuciones son
bienvenidas — desde reportar bugs hasta agregar soporte para otros
proveedores de observabilidad. Revisa CONTRIBUTING.md
para la guía de cómo participar.
Licencia
MIT © 2026 Edixon Morales
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only MCP server for AIStatusDashboard status, incidents, metrics, and fallback recommendations.
- AgentCatOAuthcom.agentcat
Analytics and debugging for your MCP server — explore usage and sessions, then root-cause errors.
- sentinelOAuthio.rootstuff
Uptime, SSL, DNS and domain monitoring you can talk to from Claude or any MCP client.
Query application logs, traces, and metrics from your AI coding assistant via Foam's MCP server.
Related MCP Servers
- FlicenseBqualityFmaintenanceEnables comprehensive Datadog monitoring capabilities including CI/CD pipeline management, service logs analysis, metrics querying, monitor and SLO management, service definitions retrieval, and team management through Claude and other MCP clients.1320-
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that provides comprehensive Datadog monitoring capabilities, enabling Claude to manage CI/CD pipelines, analyze logs, query metrics, and handle monitors and SLOs.-
- AlicenseCqualityAmaintenanceA comprehensive read-only MCP server for Datadog, providing 117 tools to query logs, APM, metrics, monitors, dashboards, SLOs, and more, with zero write capabilities for safe AI integration.100731 npm2MIT
- FlicenseNot gradedqualityBmaintenanceA read-only MCP server that gives Claude Code secure, non-invasive access to infrastructure logs, service status, metrics, Ansible facts, and Docker state via SSH, with a strict command allowlist and no write operations.-