outlook-mcp
MCP server providing full control over Outlook.com, Hotmail, Live, or Microsoft 365 email via Microsoft Graph API, enabling reading, searching, sending, and managing messages and folders securely.
README
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 |
|---|---|
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 |
🔒 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/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.
<details> <summary>Opcional: usar una aplicación propia de Entra ID</summary>
- 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. </details>
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:
- 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 |
|---|---|
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.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.