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 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