Skip to main content
Glama
DerechoVirtual

outlook-mcp

outlook-mcp · MCP de Outlook / Microsoft 365 para Claude

Servidor MCP (Model Context Protocol) que da a un agente (Claude Desktop, Claude Code, Cowork…) control completo sobre el correo de una cuenta de Outlook.com, Hotmail, Live o Microsoft 365 / Office 365: leer, buscar, ver conversaciones, descargar adjuntos, crear carpetas y borradores, mover, archivar, enviar, responder y reenviar.

Usa la API oficial Microsoft Graph con OAuth2 — no IMAP, porque Microsoft desactivó la autenticación básica tanto en Exchange Online como en Outlook.com.

🔒 Sin credenciales en el repositorio. Todo se configura por variables de entorno. La sesión se crea con python authorize.py y se guarda en token.json, que está en .gitignore. Aquí no hay ningún secreto.


🧰 Herramientas (18)

Lectura (siempre disponibles)

Tool

Qué hace

outlook_estado

Estado de la cuenta: usuario, candados y carpetas con nº de mensajes/no leídos

outlook_listar_carpetas

Todas las carpetas y subcarpetas, con su id

outlook_listar

Lista los mensajes más recientes de una carpeta (paginado, no marca leído)

outlook_buscar

Busca por remitente, destinatario, asunto, texto, fechas, no leídos, con adjuntos

outlook_buscar_kql

Busca con la sintaxis KQL de Outlook (from:, hasAttachment:true, received>=…, AND/OR/NOT)

outlook_leer

Lee un mensaje completo (cabeceras, cuerpo en texto, adjuntos)

outlook_conversacion

Muestra el hilo entero al que pertenece un mensaje

outlook_descargar_adjunto

Descarga un adjunto (base64 o a disco)

Escritura reversible (siempre disponibles)

Tool

Qué hace

outlook_marcar_leido

Marca leído / no leído

outlook_destacar

Marca para seguimiento (bandera) / quita la marca

outlook_crear_carpeta

Crea una carpeta (o subcarpeta)

outlook_guardar_borrador

Guarda un borrador en Borradores (no envía)

Mover / archivar / eliminados — requieren OUTLOOK_ALLOW_MODIFY=1

Tool

Qué hace

outlook_mover

Mueve un mensaje a otra carpeta

outlook_archivar

Mueve el mensaje a la carpeta Archivo (reversible)

outlook_eliminar

Envía a Elementos eliminados (nunca borra permanente; recuperable)

Envío — requieren OUTLOOK_ALLOW_SEND=1

Tool

Qué hace

outlook_enviar

Envía un correo nuevo (con adjuntos opcionales)

outlook_responder

Responde al remitente o a todos (mantiene el hilo)

outlook_reenviar

Reenvía un mensaje con sus adjuntos


Related MCP server: outlook-mcp-server

🔒 Seguridad

  • Candados por variable de entorno, apagados por defecto: enviar (OUTLOOK_ALLOW_SEND) y mover/archivar/eliminar (OUTLOOK_ALLOW_MODIFY). Con ellos apagados, esas tools devuelven un error claro y no hacen nada.

  • Leer nunca marca como leído (Graph no altera isRead al leer un mensaje).

  • No existe borrado permanente: no hay ninguna tool que haga DELETE en Graph; «eliminar» mueve a Elementos eliminados, recuperable.

  • El token (token.json) y el .env están en .gitignore y no se suben.


⚙️ Instalación

1) Requisitos

  • Python 3.9+

  • pip install -r requirements.txt (solo el SDK mcp; el resto es librería estándar)

2) Iniciar sesión (una vez, 1 minuto) — sin registrar nada en Azure

python authorize.py       # muestra un código -> microsoft.com/devicelogin

Por defecto usa el cliente público de Microsoft «Microsoft Graph Command Line Tools», así que no hay que registrar ninguna aplicación: abres el enlace, pegas el código, inicias sesión con tu cuenta de Outlook/Microsoft 365 y ya está. authorize.py guarda token.json y a partir de ahí el servidor refresca el token solo.

  1. https://entra.microsoft.comAplicacionesRegistros de aplicacionesNuevo registro.

  2. Nombre: outlook-mcp. Tipos de cuenta: «Cuentas en cualquier directorio organizativo y cuentas personales de Microsoft» (o solo personales, según tu caso).

  3. Copia el Id. de aplicación (cliente)OUTLOOK_CLIENT_ID.

  4. AutenticaciónConfiguración avanzada«Permitir flujos de cliente público» = Sí.

  5. (Opcional) Permisos de APIMicrosoft GraphDelegados: Mail.ReadWrite, Mail.Send, User.Read, offline_access.

3) Configuración

cp .env.example .env      # candados y, si quieres, tu propia app o ruta del token

4a) Registrar en Claude Desktop

En claude_desktop_config.json:

{
  "mcpServers": {
    "outlook": {
      "command": "python",
      "args": ["C:/ruta/a/outlook-mcp/server.py"],
      "env": {
        "PYTHONUTF8": "1",
        "OUTLOOK_TENANT": "common",
        "OUTLOOK_TOKEN_PATH": "C:/ruta/a/outlook-mcp/token.json",
        "OUTLOOK_ALLOW_SEND": "0",
        "OUTLOOK_ALLOW_MODIFY": "0"
      }
    }
  }
}

Reinicia Claude Desktop después de editarlo.

4b) Instalar en Cowork / Claude Code por URL (como plugin)

Este repo incluye .claude-plugin/marketplace.json:

  1. Directorio → Plugins → Añadir marketplace → pega la URL de este repositorio → Sincronizar.

  2. Instala el plugin outlook.

  3. Configura las variables de entorno en el cliente y ejecuta python authorize.py una vez.


🧪 Validación

python test_offline.py    # sin credenciales: no necesita cuenta ni red
python test_gate.py       # contra la cuenta real (solo lectura)
  • test_offline.py comprueba, con la red simulada, que cada tool construye la llamada correcta a Graph: que ninguna hace DELETE, que «eliminar» y «archivar» son movimientos de carpeta, el mapeo de nombres de carpeta (papeleradeleteditems…), la construcción de KQL, los destinatarios, el HTML→texto y los adjuntos.

  • test_gate.py descubre todas las tools por el protocolo MCP, prueba las de lectura contra la cuenta real, comprueba que los candados bloquean envío y eliminación, y hace el handshake por stdio. No envía nada a terceros ni borra ningún correo.


💡 Ejemplos de uso

  • «¿Qué me ha llegado hoy sin leer?» → outlook_listar / outlook_buscar

  • «Busca los correos del cliente X con adjunto desde junio» → outlook_buscar_kql("from:X hasAttachment:true received>=2026-06-01")

  • «Enséñame el hilo completo de esta reclamación» → outlook_conversacion

  • «Guárdame el PDF del último correo» → outlook_descargar_adjunto

  • «Prepárame un borrador de respuesta» → outlook_guardar_borrador


❓ Problemas frecuentes

Síntoma

Causa / solución

No hay sesion de Outlook

Ejecuta python authorize.py una vez

AADSTS7000218 o client_assertion

Falta «Permitir flujos de cliente público» = Sí en Autenticación

AADSTS50194 / cuenta no admitida

El registro no admite cuentas personales: cámbialo a multiinquilino + personales, o usa OUTLOOK_TENANT=consumers

Graph 403 al enviar

Falta el permiso Mail.Send o el candado OUTLOOK_ALLOW_SEND=1

Token caducado tras meses sin uso

Vuelve a ejecutar python authorize.py


Genérico y sin datos personales en el código. Configúralo con tu propia cuenta.

A
license - permissive license
-
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.

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/DerechoVirtual/outlook-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server