Cómo conectar Claude con Outlook paso a paso
Lee, resume y redacta correos de Outlook con la API de Claude y Microsoft Graph, en Python.

- Cuenta de Microsoft 365 / Outlook (personal o corporativa)
- Una API key de Anthropic (console.anthropic.com)
- Python 3.10+ instalado
- Acceso al portal de Azure para registrar una app (cuenta gratuita sirve)
- Registrar una app en Azure para acceder a tu buzón de Outlook vía Microsoft Graph
- Autenticarte y leer tus correos recientes desde Python
- Enviar esos correos a Claude (claude-opus-4-8) para resumirlos o clasificarlos
- Generar borradores de respuesta automáticos con Claude
Registrar la app en Azure
Claude no se conecta directamente a Outlook: el puente es Microsoft Graph, la API oficial de Microsoft 365. Primero necesitas una identidad para tu script. Entra en portal.azure.com, busca 'Microsoft Entra ID' (antes Azure AD) y ve a 'Registros de aplicaciones' > 'Nuevo registro'. Ponle un nombre como 'claude-outlook', elige 'Cuentas en cualquier directorio organizativo y cuentas personales' y en URI de redirección selecciona 'Cliente público/nativo' con el valor http://localhost. Guarda. En la página de la app apunta el 'ID de aplicación (cliente)' y el 'ID de directorio (inquilino)'. Luego ve a 'Permisos de API' > 'Agregar un permiso' > Microsoft Graph > 'Permisos delegados' y añade Mail.Read, Mail.Send y User.Read. Pulsa 'Conceder consentimiento de administrador' si tu cuenta lo permite. Esto autoriza a tu futuro script a leer y enviar correo en tu nombre.
Preparar el entorno de Python
Vamos a instalar las dos librerías clave: el SDK oficial de Anthropic para hablar con Claude y MSAL de Microsoft para la autenticación con Graph. Crea una carpeta para el proyecto y, dentro, un entorno virtual para no ensuciar tu Python global. En España y LATAM recomiendo trabajar siempre en entornos virtuales para evitar conflictos de versiones. Luego instalas las dependencias y guardas tus credenciales como variables de entorno en lugar de pegarlas en el código: así evitas subirlas por accidente a GitHub.
python -m venv .venv
source .venv/bin/activate # en Windows: .venv\Scripts\activate
pip install anthropic msal requests
# Guarda tus credenciales (ajusta los valores)
export ANTHROPIC_API_KEY="sk-ant-..."
export AZURE_CLIENT_ID="tu-client-id"
export AZURE_TENANT_ID="tu-tenant-id"Autenticarte y leer correos con Microsoft Graph
Ahora conectamos con Outlook. Usaremos el flujo de 'device code' de MSAL: el script te mostrará un código y una URL; abres la URL en el navegador, pegas el código e inicias sesión con tu cuenta de Outlook. Es el método más simple para apps de escritorio y no requiere gestionar secretos de cliente. Una vez autenticado, MSAL devuelve un token de acceso que pasamos a la API de Graph para pedir los últimos correos de tu bandeja de entrada. El endpoint /me/messages soporta parámetros como $top (cuántos) y $select (qué campos) para no descargar datos de más.
import os, msal, requests
CLIENT_ID = os.environ["AZURE_CLIENT_ID"]
TENANT_ID = os.environ["AZURE_TENANT_ID"]
SCOPES = ["Mail.Read", "Mail.Send"]
app = msal.PublicClientApplication(
CLIENT_ID, authority=f"https://login.microsoftonline.com/{TENANT_ID}"
)
flow = app.initiate_device_flow(scopes=SCOPES)
print(flow["message"]) # abre la URL y pega el codigo
result = app.acquire_token_by_device_flow(flow)
token = result["access_token"]
headers = {"Authorization": f"Bearer {token}"}
url = "https://graph.microsoft.com/v1.0/me/messages?$top=5&$select=subject,from,bodyPreview"
correos = requests.get(url, headers=headers).json()["value"]
for c in correos:
print(c["subject"], "-", c["from"]["emailAddress"]["address"])Enviar los correos a Claude para resumirlos
Con los correos en memoria, se los pasamos a Claude. Montamos un prompt que incluye asunto, remitente y vista previa de cada mensaje, y le pedimos un resumen accionable con prioridad. Aquí usamos el modelo claude-opus-4-8, el más capaz para entender contexto y matices en español. La clave es dar instrucciones claras: formato de salida, idioma y qué queremos destacar. Claude procesa todo en una sola llamada y devuelve un resumen limpio que podrías enviarte a ti mismo o volcar en un informe diario.
import anthropic
client = anthropic.Anthropic() # lee ANTHROPIC_API_KEY del entorno
listado = "\n\n".join(
f"De: {c['from']['emailAddress']['address']}\n"
f"Asunto: {c['subject']}\n"
f"Resumen: {c['bodyPreview']}" for c in correos
)
msg = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[{
"role": "user",
"content": f"Resume estos correos de mi bandeja en español. "
f"Para cada uno indica prioridad (alta/media/baja) "
f"y si requiere respuesta:\n\n{listado}"
}]
)
print(msg.content[0].text)Generar y enviar un borrador de respuesta
El último paso cierra el círculo: pedimos a Claude que redacte una respuesta a un correo concreto y la enviamos de vuelta por Outlook con el endpoint sendMail de Graph. Elegimos el primer correo del listado como ejemplo. Claude genera el cuerpo en tono profesional y en español; tú siempre deberías revisarlo antes de que salga. El payload de sendMail usa formato JSON con el asunto, el cuerpo y el destinatario. Al ejecutar, el correo se envía desde tu propia cuenta de Outlook.
objetivo = correos[0]
borrador = client.messages.create(
model="claude-opus-4-8",
max_tokens=600,
messages=[{"role": "user", "content":
f"Redacta una respuesta breve y profesional en español a este correo:\n"
f"Asunto: {objetivo['subject']}\nContenido: {objetivo['bodyPreview']}"}]
).content[0].text
payload = {
"message": {
"subject": f"RE: {objetivo['subject']}",
"body": {"contentType": "Text", "content": borrador},
"toRecipients": [{"emailAddress": {
"address": objetivo["from"]["emailAddress"]["address"]}}]
}
}
r = requests.post("https://graph.microsoft.com/v1.0/me/sendMail",
headers=headers, json=payload)
print("Enviado" if r.status_code == 202 else r.text)Has construido un puente funcional entre Claude y Outlook: tu script se autentica con Microsoft Graph, lee los correos recientes de tu bandeja, los resume y prioriza con claude-opus-4-8, y hasta redacta y envía respuestas automáticas. Es una base sólida que puedes convertir en un asistente de correo diario. Si quieres entender mejor los fundamentos antes de automatizar más, te vendrá bien un curso para empezar con Claude desde cero y ganar soltura con prompts y la consola.