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.pyy se guarda entoken.json, que está en.gitignore. Aquí no hay ningún secreto.
🧰 Herramientas (18)
Lectura (siempre disponibles)
Tool | Qué hace |
| Estado de la cuenta: usuario, candados y carpetas con nº de mensajes/no leídos |
| Todas las carpetas y subcarpetas, con su id |
| Lista los mensajes más recientes de una carpeta (paginado, no marca leído) |
| Busca por remitente, destinatario, asunto, texto, fechas, no leídos, con adjuntos |
| Busca con la sintaxis KQL de Outlook ( |
| Lee un mensaje completo (cabeceras, cuerpo en texto, adjuntos) |
| Muestra el hilo entero al que pertenece un mensaje |
| Descarga un adjunto (base64 o a disco) |
Escritura reversible (siempre disponibles)
Tool | Qué hace |
| Marca leído / no leído |
| Marca para seguimiento (bandera) / quita la marca |
| Crea una carpeta (o subcarpeta) |
| Guarda un borrador en Borradores (no envía) |
Mover / archivar / eliminados — requieren OUTLOOK_ALLOW_MODIFY=1
Tool | Qué hace |
| Mueve un mensaje a otra carpeta |
| Mueve el mensaje a la carpeta Archivo (reversible) |
| Envía a Elementos eliminados (nunca borra permanente; recuperable) |
Envío — requieren OUTLOOK_ALLOW_SEND=1
Tool | Qué hace |
| Envía un correo nuevo (con adjuntos opcionales) |
| Responde al remitente o a todos (mantiene el hilo) |
| Reenvía un mensaje con sus adjuntos |
🔒 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
isReadal leer un mensaje).No existe borrado permanente: no hay ninguna tool que haga
DELETEen Graph; «eliminar» mueve a Elementos eliminados, recuperable.El token (
token.json) y el.envestán en.gitignorey no se suben.
⚙️ Instalación
1) Requisitos
Python 3.9+
pip install -r requirements.txt(solo el SDKmcp; 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/deviceloginPor 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.
https://entra.microsoft.com → Aplicaciones → Registros de aplicaciones → Nuevo registro.
Nombre:
outlook-mcp. Tipos de cuenta: «Cuentas en cualquier directorio organizativo y cuentas personales de Microsoft» (o solo personales, según tu caso).Copia el Id. de aplicación (cliente) →
OUTLOOK_CLIENT_ID.Autenticación → Configuración avanzada → «Permitir flujos de cliente público» = Sí.
(Opcional) Permisos de API → Microsoft Graph → Delegados:
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 token4a) 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:
Directorio → Plugins → Añadir marketplace → pega la URL de este repositorio → Sincronizar.
Instala el plugin
outlook.Configura las variables de entorno en el cliente y ejecuta
python authorize.pyuna 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.pycomprueba, con la red simulada, que cada tool construye la llamada correcta a Graph: que ninguna haceDELETE, que «eliminar» y «archivar» son movimientos de carpeta, el mapeo de nombres de carpeta (papelera→deleteditems…), la construcción de KQL, los destinatarios, el HTML→texto y los adjuntos.test_gate.pydescubre 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 |
| Ejecuta |
| Falta «Permitir flujos de cliente público» = Sí en Autenticación |
| El registro no admite cuentas personales: cámbialo a multiinquilino + personales, o usa |
| Falta el permiso |
Token caducado tras meses sin uso | Vuelve a ejecutar |
Genérico y sin datos personales en el código. Configúralo con tu propia cuenta.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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