@alexbuzo/outlook-mcp
v0.1.0
Published
Outlook/Exchange EWS MCP server exposing mailbox tools over stdio.
Downloads
42
Maintainers
Readme
outlook-mcp
Локальный MCP-сервер для работы с Outlook / Exchange mailbox через EWS SOAP API, NTLM, HTTP/1.1 и persistent keep-alive connection.
Сервер не вызывает LLM сам. Он предоставляет MCP tools и возвращает структурированные JSON-данные. Анализ, суммаризация и reasoning выполняются внешним MCP-клиентом: Cursor, Cline, Claude Desktop или другим совместимым клиентом.
Архитектура
MCP client
↓ stdio
outlook-mcp
↓ EWS SOAP + NTLM + HTTP/1.1
Exchange EWS
↓
Exchange mailboxTools зависят от MailService, а не от EWS напрямую. Сейчас реализован EwsMailService; позже можно добавить GraphMailService без переписывания MCP tools.
Когда использовать EWS
Этот сервер полезен для Exchange environments, где доступен EWS endpoint, но Microsoft Graph недоступен или не подходит: on-prem Exchange, hybrid deployments, legacy enterprise setups или environments с NTLM/Negotiate authentication.
Basic Auth не используется. Основной backend — EWS SOAP через NTLM over HTTP/1.1. Архитектура оставляет место для Graph backend позже.
Требования
- Node.js 20+
- Доступ к VPN или внутренней сети, если EWS endpoint не публичный
- Доступ к EWS URL
- Доменный пользователь
- NTLM-аутентификация
Ручная проверка EWS
Проверить endpoint:
curl -I https://mail.example.com/EWS/Exchange.asmxОжидаемо:
401 Unauthorized
WWW-Authenticate: NTLM
WWW-Authenticate: NegotiateПроверить NTLM:
curl -v --http1.1 --ntlm -u 'DOMAIN\\username' https://mail.example.com/EWS/Exchange.asmxОжидаемо:
HTTP/1.1 200 OK
Persistent-Auth: trueУстановка из npm
После публикации пакет можно запускать через npx:
npx -y @alexbuzo/outlook-mcpИли установить глобально:
npm install -g @alexbuzo/outlook-mcp
outlook-mcpЛокальная разработка
git clone https://github.com/abuzo/outlook-mcp.git
cd outlook-mcp
npm install
npm run build
npm testНастройка env
Скопируйте .env.example в .env и заполните:
MAIL_BACKEND=ews
EWS_URL=https://mail.example.com/EWS/Exchange.asmx
EWS_AUTH_TYPE=ntlm
EWS_DOMAIN=EXAMPLE
EWS_USERNAME=<domain-user>
EWS_PASSWORD=<ews-password>
[email protected]Ключевые политики по умолчанию:
ALLOW_SEND=false
ALLOW_MOVE=false
ALLOW_MARK_READ=true
ALLOWED_SEND_DOMAINS=example.comЕсли ALLOWED_SEND_DOMAINS пустой, отправка считается allow all только при ALLOW_SEND=true. Это рискованный режим; используйте его только осознанно.
Проверка EWS
npm run ews:ping
npm run ews:find-inboxЗапуск локально
npm run devnpm run dev запускает MCP server на stdio. В MCP runtime stdout используется только для JSON-RPC протокола, все логи идут в stderr.
MCP config
Пример для Cursor/Cline/Claude Desktop при запуске опубликованного npm-пакета:
{
"mcpServers": {
"outlook-mcp": {
"command": "npx",
"args": ["-y", "@alexbuzo/outlook-mcp"],
"env": {
"MAIL_BACKEND": "ews",
"EWS_URL": "https://mail.example.com/EWS/Exchange.asmx",
"EWS_AUTH_TYPE": "ntlm",
"EWS_DOMAIN": "EXAMPLE",
"EWS_USERNAME": "<domain-user>",
"EWS_PASSWORD": "<ews-password>",
"MAILBOX_SMTP": "[email protected]",
"ALLOW_SEND": "false",
"ALLOW_MOVE": "false",
"ALLOW_MARK_READ": "true",
"ALLOWED_SEND_DOMAINS": "example.com"
}
}
}
}Пример для локального checkout:
{
"mcpServers": {
"outlook-mcp": {
"command": "node",
"args": ["/absolute/path/outlook-mcp/dist/index.js"],
"env": {
"MAIL_BACKEND": "ews",
"EWS_URL": "https://mail.example.com/EWS/Exchange.asmx",
"EWS_AUTH_TYPE": "ntlm",
"EWS_DOMAIN": "EXAMPLE",
"EWS_USERNAME": "<domain-user>",
"EWS_PASSWORD": "<ews-password>",
"MAILBOX_SMTP": "[email protected]",
"ALLOW_SEND": "false",
"ALLOW_MOVE": "false",
"ALLOW_MARK_READ": "true",
"ALLOWED_SEND_DOMAINS": "example.com"
}
}
}
}MCP tools
search_emails— поиск писем без full body.read_email— чтение metadata и опционально body с ограничением размера.read_thread— чтение цепочки поconversationId.list_attachments— metadata вложений без скачивания binary content.extract_action_items— deterministic helper по простым русским и английским маркерам.create_draft— создание черновика, без отправки.create_reply_draft— создание reply/reply-all черновика, без отправки.send_draft— отправка только существующего draft приALLOW_SEND=trueиconfirm=true.mark_as_read— установка read/unread приALLOW_MARK_READ=true.move_email— перемещение вinbox,archiveилиdeleteditemsприALLOW_MOVE=true.
Security notes
- Read-only by default: отправка и перемещение выключены.
send_draftтребуетALLOW_SEND=trueиconfirm=true.- Permanent delete не реализован.
- Binary content вложений не скачивается.
- Пароль, NTLM challenge/response, Authorization headers, body писем и вложения не логируются.
- Audit log пишет timestamp, tool, action type, target id, success/failure и sanitized error.
- Body ограничивается
MAX_BODY_CHARS. - Количество результатов ограничивается
MAX_SEARCH_RESULTSиMAX_THREAD_MESSAGES. - Отправка проверяет recipients по
ALLOWED_SEND_DOMAINS. - TLS verification не отключается.
Troubleshooting
HTTP_1_1_REQUIRED
Причина: Exchange не принимает NTLM over HTTP/2. Решение: EWS_FORCE_HTTP1=true.
401 Unauthorized
Возможные причины:
- неверный
EWS_DOMAIN; - неверный
EWS_USERNAMEилиEWS_PASSWORD; - EWS недоступен для пользователя;
- VPN не подключен.
403 Forbidden
Возможные причины:
- политика Exchange запрещает EWS;
- mailbox недоступен для пользователя.
SELF_SIGNED_CERT / certificate issue
Не отключайте TLS verification без согласования. Проверьте корпоративный root CA в системном trust store.
MCP protocol broken
Причина: что-то пишет в stdout. В MCP runtime stdout должен содержать только JSON-RPC. Все logs, debug и startup errors должны идти в stderr.
node-libcurl install problems
На macOS обычно достаточно:
npm installЕсли сборка native dependency не проходит:
xcode-select --install
brew install curl
npm installОграничения MVP
- Нет скачивания вложений.
- Нет Microsoft Graph backend.
- Нет OAuth backend.
- Нет Kerberos/Negotiate backend.
- Нет shared mailbox impersonation.
- Нет UI.
- Нет автоматической отправки писем.
- Нет permanent delete.
Roadmap
- Graph backend.
- OAuth EWS backend.
- Kerberos/Negotiate backend.
- Shared mailbox support.
- Attachment download with policy.
- Secure password storage через macOS Keychain.
- Docker packaging.
