mcp-outlook
mcp-outlook
Разворачиваемый у себя MCP-сервер для локального Microsoft Exchange через EWS (Exchange Web Services). Создан для сред с изоляцией от внешних сетей / без облака — он общается напрямую с вашим внутреним Exchange-сервером и никогда не обращается к Microsoft Graph, Azure AD или настольном клиенту Outlook.
Бэкенд:
exchangelib(клиент EWS)Фреймворк: FastMCP
Транспорт: streamable-http (автономный HTTP-сервер, к которому подключаются другие внутренние хосты)
Аутентификация в Exchange: basic или NTLM (выбирается через конфигурацию)
Два режима
Режим | Для кого | Как аутентифицируется |
| один почтовый ящик | подключается как эта учётная запись (ваши собственные учётные данные) — отлично подходит для локального бета-тестирования |
| много пользователей | проверяет пользовательский JWT у каждого вызывающего, затем работает с почтовым ящиком этого пользователя через служебную учётную запись + EWS Impersonation |
Как режим jwt связывает идентичность. Exchange не может использовать JWT вашей компании (Outlook основан на PKINIT/Kerberos). Поэтому MCP выполняет два отдельных процесса аутентификации, которые никогда не смешиваются:
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 mailboxJWT пользователя никогда не отправляется в Exchange, и ни пароль пользователя, ни смарт-карта никогда не касаются MCP — только единственные учётные данные службы. О том, что администраторы должны настроить для режима jwt, см. TODO.md.
Related MCP server: OWA Exchange MCP Server
Инструменты
Инструмент | Назначение |
| Последние сообщения, сначала новые |
| Поиск по тексту + диапазону дат + отправителю/получателю |
| Полное сообщение: тело, получатели, имена вложений |
| Открывает интерактивный виджет создания письма (MCP Apps); пользовател редактирует и отправляет |
| Открывает виджет создания письма, предварително заполненный как ответ |
| Открывает виджет создания письма, предварително заполненный как пересылка |
| Отправка — вызывается только из виджета (только для приложения) |
| Поиск контактов — вызывается только из виджета (только для приложения) |
| Переключение статуса прочтеня |
| Переместить в «Удалённые» или удалить безвозвратно |
| Устанавливает важность High/Normal в Outlook |
| Перемещает сообщение в другую папку |
| Имена доступных почтовых папок, включая вложенные |
| События календаря в заданном диапазоне дат |
| Полное событие: описание, участники, место |
| Помощник планирования — ранжирует слоты по доступности участников |
| Открывает интерактивный виджет создания события |
| Создание события — вызывается только из виджета (только для приложения) |
| Ответить на приглашение на собрание |
list_emails и search_emails также принимают unread_only=true, чтобы возвращать только непрочитанные сообщения.
Установка
Требуется Pythorn 3.11+ и uv.
uv sync # create venv + install deps
cp .env.example .env # then edit .env with your Exchange details
uv run python -m mcp_outlookСервер привязывается к MCP_HOST:MCP_PORT (по умолчанию 127.0.0.1:8000) и обслуживает MCP-endpoинт streamable-http по адресу /mcp.
Локалное бета-тестирование (без настройки администратором)
Запустите с вашим собственным почтовым ящиком и вашими именем пользователя/паролем — без JWT, олицетворения, служебной учётной записи и смарт-карты:
# 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_outlookКонфигурация
Все настройки задаются через переменные окружения (или файл .env). Полный список см. в .env.example. Основное:
Переменная | Примечания |
|
|
| Полный asmx URL, например |
| Альтернатива только с именем хоста (конечная точка предпоагается по адресу |
| Подключаемая учётная запись — ваша собственная (static) или служебная (jwt). |
| Почтовый ящик для открытия (режим static). Необязательно — по умолчанию |
| пароль учётной записи. Не испоьзуется с |
|
|
| Обязательно в режиме jwt — издатель токена и аудитория, которые требуется проверять |
| режим jwt — ключи подписи (JWKS URI или статический PEM для изолированных сред) |
| режим jwt — утверждение (claim), содержащее SMTP-адрес пользователя (по умолчанию |
| Путь к внутреннему CA |
|
|
| HTTP-привязка (по умолчанию |
Поиск конечной точки EWS
URL EWS — это не URL OWA (веб-почты). На сервере Exchange:
Get-WebServicesVirtualDirectory | fl Name,InternalUrl,ExternalUrlВ изолированной (air-gapped) среде почти всегда нужен InternalUrl.
Тестирование
Модульные тесты не требуют сервера Exchange (только разбор конфигурации + сериализация):
uv run pytestЖивой смоук-тест (с реальным .env): запустите сервер, подключите MCP-клиент или MCP Inspector, затем вызовите list_folders → list_emails → send_email (себе) и подтвердите получение. Переключайте OUTLOOK_AUTH_TYPE между ntlm и basic, чтобы подтвердить тот вариант, который включён вашим администратором Exchange.
Интерфейс создания (MCP Apps)
draft_email открывает интерактивный виджет MCP Apps — React-композер, встроенный в один автономный HTML-файл (src/mcp_outlook/widgets/compose.html). Любой хост, поддерживающий MCP Apps, отображает его прямо в ветке чата.
Возможности виджета:
Поле «Кому» со встроенным поиском контактов — после последней запятой начните вводить текст для поиска контактов; выберите результат, чтобы заменить запрос чипом; корректные адреса отображаются как подписанные чипы.
Send / Discard — Send вызывает
send_emailпрямо из виджета (только для приложения — модель не может его вызвать); Discard сворачивает карточку.Замещение — открытие нового черновика затемняет любой более старый открытый виджет черновика.
Подпись — каждый черновик предварительно заполняется строкой "Written with Airchat" (можно редактировать).
Гарантия автономности (Air-gap): собранный HTML (React + встроенный bridge JS) поставляется с Python-пакетом. Во время выполнения не выполняется никаких внешних запросов ресурсов; Node.js нужен только для пересборки виджета.
Пересборка виджета (только для разработки)
cd frontend
npm ci
npm run build # tsc + vite build + artifact copy → src/mcp_outlook/widgets/compose.htmlСкрипт сборки перед копированием проверяет, что в HTML не попало внешних URL.
Попробуйте визуально (автономное превью для разработки)
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.Подводные камни
Базовую аутентификацию часто отключают на современных Exchange — NTLM является более безопасным вариантом по умолчанию.
Внутренние/самоподписанные сертификаты требуют
OUTLOOK_CA_BUNDLE, иначе соединение не пройдёт проверку TLS.Многопользовательскому режиму (
jwt) нужно одно разрешение Exchange — служебная учётная запись должна иметь роль RBACApplicationImpersonation. См.TODO.md. Режимstaticне требует такого разрешения.В
.envхранится пароль в открытом виде. Он игнорируется git; также ограничьте права на файл (chmod 600 .env) на хосте.
This server cannot be deployed
Maintenance
Related MCP Connectors
Hosted email MCP for your own Gmail, Outlook.com, Microsoft 365, iCloud or IMAP inbox: read, search, draft, reply in thread, forward and file mail. It moves or flags up to 500 messages in one call, and a send leaves exactly one copy in Sent. A calendar is a separate connection, and connecting one adds diary and scheduling tools.
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.
Hosted MCP server for your Gmail, Outlook and IMAP mail, with mailboxes and scopes set per agent.
Related MCP Servers
- AlicenseCqualityBmaintenanceSecure MCP server for on-prem Microsoft Exchange (EWS) with tools for email, calendar, contacts, folders, attachments, and free/busy availability.3111MIT
- 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.3046 PyPI11MIT
- -licenseNot gradedqualityBmaintenanceSecure MCP server for Microsoft Exchange. It enables authorized users to list, search, read, download attachments, send, and reply to email via EWS with strict access control and audit.-
- AlicenseNot gradedqualityBmaintenanceEnables searching, reading full conversations, and sending email across multiple IMAP/SMTP mailboxes from any MCP client, with multi-user support and per-user API tokens.MIT