mcp-outlook
mcp-outlook
Un servidor MCP autoalojable para Microsoft Exchange local a través de EWS (Exchange Web Services). Diseñado para entornos aislados / sin nube: se comunica directamente con tu servidor Exchange interno y nunca toca Microsoft Graph, Azure AD ni un cliente de escritorio de Outlook.
Backend:
exchangelib(cliente EWS)Framework: FastMCP
Transporte: streamable-http (un servidor HTTP independiente al que se conectan otros hosts internos)
Autenticación con Exchange: básica o NTLM (seleccionable mediante configuración)
Dos modos
Modo | A quién sirve | Cómo autentica |
| un buzón | se conecta como esa cuenta (tus propias credenciales) — ideal para pruebas beta locales |
| muchos usuarios | valida el JWT de usuario de cada llamante y luego actúa sobre el buzón de ese usuario mediante una cuenta de servicio + suplantación de EWS (EWS Impersonation) |
Cómo el modo jwt tiende un puente entre identidades. Exchange no puede consumir los JWT de tu empresa (Outlook se basa en PKINIT/Kerberos). Por eso el MCP realiza dos autenticaciones separadas que nunca se mezclan:
User --(JWT)--> MCP validates the token, reads the user's email
MCP --(service account, NTLM)--> Exchange
MCP --(impersonation header = user's email)--> acts on the user's mailboxEl JWT del usuario nunca se envía a Exchange, y ninguna contraseña/tarjeta inteligente de usuario toca jamás el MCP: solo lo hace la única credencial de servicio. Consulta TODO.md para saber qué deben configurar los administradores para el modo jwt.
Related MCP server: OWA Exchange MCP Server
Herramientas
Herramienta | Propósito |
| Mensajes recientes, primero los más nuevos |
| Búsqueda por texto + rango de fechas + remitente/destinatario |
| Mensaje completo: cuerpo, destinatarios, nombres de los archivos adjuntos |
| Abre el widget interactivo de redacción (MCP Apps); el usuario edita y envía |
| Abre el widget de redacción prerrellenado como respuesta |
| Abre el widget de redacción prerrellenado como reenvío |
| Enviar: se puede llamar solo desde el widget (visibilidad solo para la app) |
| Buscar contactos: se puede llamar solo desde el widget (solo para la app) |
| Cambia el estado de leído/no leído |
| Mover a Elementos eliminados, o eliminar permanentemente |
| Establece la importancia Alta/Normal de Outlook |
| Mueve un mensaje a otra carpeta |
| Nombres de carpetas de correo disponibles, incluidas subcarpetas |
| Eventos de calendario en un rango de fechas |
| Evento completo: cuerpo, asistentes, ubicación |
| Asistente de programación: ordena las franjas por disponibilidad de los asistentes |
| Abre el widget interactivo de borrador de evento |
| Crear el evento: se puede llamar solo desde el widget (solo para la app) |
| Responde a una invitación de reunión |
list_emails y search_emails también aceptan unread_only=true para devolver solo mensajes no leídos.
Instalación
Requiere Python 3.11+ y uv.
uv sync # create venv + install deps
cp .env.example .env # then edit .env with your Exchange details
uv run python -m mcp_outlookEl servidor se vincula a MCP_HOST:MCP_PORT (por defecto 127.0.0.1:8000) y sirve el endpoint MCP streamable-http en /mcp.
Pruebas beta locales (sin configuración de administrador)
Ejecuta contra tu propio buzón con tu propio nombre de usuario/contraseña: sin JWT, sin suplantación, sin cuenta de servicio, sin tarjeta inteligente:
# in .env:
OUTLOOK_AUTH_MODE=static # the default
OUTLOOK_EWS_ENDPOINT=https://mail.corp.local/EWS/Exchange.asmx
OUTLOOK_USERNAME=CORP\you
OUTLOOK_PASSWORD=...
uv run python -m mcp_outlookConfiguración
Todos los ajustes provienen de variables de entorno (o de un archivo .env). Consulta .env.example para ver la lista completa. Lo esencial:
Variable | Notas |
|
|
| URL asmx completa, p. ej. |
| Alternativa solo con host (se asume el endpoint en |
| La cuenta que se conecta: la tuya propia (static) o la cuenta de servicio (jwt). |
| Buzón que se abre (modo static). Opcional: por defecto usa |
| Contraseña de la cuenta. No se usa con |
|
|
| Requeridos en modo jwt: emisor y audiencia del token que se deben exigir |
| modo jwt: claves de firma (URI JWKS, o un PEM estático para entornos aislados) |
| modo jwt: claim que contiene la dirección SMTP del usuario (por defecto |
| Ruta al |
|
|
| Enlace HTTP (por defecto |
Cómo encontrar tu endpoint de EWS
La URL de EWS no es la URL de OWA (webmail). En el servidor Exchange:
Get-WebServicesVirtualDirectory | fl Name,InternalUrl,ExternalUrlEn una instalación aislada casi siempre querrás la InternalUrl.
Pruebas
Las pruebas unitarias no necesitan servidor Exchange (solo análisis de configuración + serialización):
uv run pytestPrueba de humo en vivo (con un .env real): inicia el servidor, conecta un cliente MCP o el MCP Inspector, y luego llama a list_folders → list_emails → send_email (a ti mismo) y confirma la recepción. Cambia OUTLOOK_AUTH_TYPE entre ntlm y basic para confirmar cuál tiene habilitado tu administrador de Exchange.
Interfaz de redacción (MCP Apps)
draft_email abre un widget interactivo de MCP Apps: un editor de React integrado en un único archivo HTML autocontenido (src/mcp_outlook/widgets/compose.html). Cualquier host compatible con MCP Apps lo renderiza en línea dentro del hilo de chat.
Funcionalidades del widget:
Campo Para con búsqueda de contactos integrada: escribe después de la última coma para buscar contactos; selecciona un resultado para sustituir la consulta por un chip; las direcciones válidas se muestran como chips etiquetados.
Enviar / Descartar: Enviar dispara
send_emaildirectamente desde el widget (solo para la app: el modelo no puede llamarlo); Descartar colapsa la tarjeta.Sustitución: abrir un nuevo borrador atenúa (pone en gris) cualquier widget de borrador anterior abierto.
Firma: cada borrador se precarga con "Written with Airchat" (editable).
Garantía de aislamiento: el HTML generado (React + JS de puente incrustado) se distribuye con el paquete de Python. No se realizan solicitudes de recursos externos en tiempo de ejecución; Node.js solo se necesita para reconstruir el widget.
Reconstruir el widget (solo desarrollo)
cd frontend
npm ci
npm run build # tsc + vite build + artifact copy → src/mcp_outlook/widgets/compose.htmlEl script de compilación verifica que no haya URLs externas en el HTML antes de copiarlo.
Pruébalo visualmente (vista previa de desarrollo independiente)
cd frontend && npm run dev
# Opens http://localhost:5173 with a mock host — no Exchange needed.
# Type in To, see chips form, contact results appear, Send/Discard collapse the card.Advertencias
La autenticación básica suele estar deshabilitada en Exchange moderno: NTLM es la opción predeterminada más segura.
Los certificados internos/autofirmados requieren
OUTLOOK_CA_BUNDLE; de lo contrario, la conexión falla en la verificación TLS.El modo multiusuario (
jwt) necesita un permiso de Exchange: la cuenta de servicio debe tener el rol RBACApplicationImpersonation. ConsultaTODO.md. El modostaticno necesita ese permiso..envcontiene una contraseña en texto plano. Está ignorado por git; además, restringe los permisos del archivo (chmod 600 .env) en el host.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.
Microsoft Exchange MCP server - hosted, multi-user, incl. Exchange on-prem & hybrid (EWS)
Manage Microsoft 365 email, calendar, contacts and inbox rules via the Graph API with OAuth 2.0.
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Related MCP Servers
- AlicenseCqualityAmaintenanceSecure MCP server for on-prem Microsoft Exchange (EWS) with tools for email, calendar, contacts, folders, attachments, and free/busy availability.314MIT
- AlicenseAqualityDmaintenanceMCP server for any Microsoft Exchange / OWA deployment. Gives LLM agents access to email, calendar, directory search, folders, availability, and meeting analytics via 30 tools.307MIT
- AlicenseNot gradedqualityCmaintenanceEnables reading, sending, and managing Microsoft 365/Outlook emails through MCP tools with OAuth 2.1 authentication.114MIT
- FlicenseAqualityBmaintenanceMCP server for corporate Exchange that provides access to email, calendar, and people directory via OWA JSON API.20
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/ItayElizur/mcp-outlook'
If you have feedback or need assistance with the MCP directory API, please join our Discord server