outlook-mcp
outlook-ews-mcp
outlook-ews-mcp — это MCP сервер для локального Microsoft
Exchange через EWS (exchangelib). Он предоставляет
MCP-совместимым клиентам (Claude Desktop, Claude Code и любым другим MCP-клиентам) доступ к
электронной почте, календарю, контактам, папкам, вложениям и данным о доступности через единый,
тестируемый Python-сервис — без необходимости прямого скриптования почтового ящика.
Переименован из
outlook-mcp. Это имя уже было занято на PyPI несвязанным проектом, поэтому имя дистрибутива и CLI теперь —outlook-ews-mcp. Путь импорта Python не изменился. До первого тегированного релиза на PyPI устанавливайте из этого репозитория, как показано ниже.
Содержание
Related MCP server: owa-mail-mcp
Возможности
Электронная почта — список, поиск (по подстроке или Advanced Query Syntax), чтение, отправка, ответ, пересылка, перемещение, копирование, удаление, пометка, категоризация, массовые операции, экспорт в сыром MIME, добавление/удаление вложений
Система — правила входящих, автоответы (автоматические ответы), список делегатов только для чтения
Календарь — список, создание, обновление, удаление, ответы на приглашения, поиск свободных слотов, просмотр календаря общего/делегированного почтового ящика, Room Finder, массовые операции
Контакты — поиск, чтение, создание, обновление, удаление
Папки и вложения — CRUD для папок и загрузка вложений
Аутентификация —
NTLMиBasicдля локального ExchangeТранспорт —
stdioиSSEАрхитектура — централизованное сопоставление ошибок через единую абстракцию
ExchangeClient(см. Заметки о проекте)Безопасность — более приватная проверка работоспособности по умолчанию (см. Проверка работоспособности)
Операции — Docker-образ и готовые пайплайны CI/CD для GitHub и GitLab
Каталог инструментов
Каждый инструмент ниже зарегистрирован в tool_specs.py — едином
источнике истины для его имени, описания и схемы. Read-only помечает инструменты, которые никогда
не изменяют почтовый ящик — они получают больше конкурентности (см.
Очередь запросов) и их безопасно вызывать спекулятивно.
Система
Инструмент | Описание | Только чтение |
| Проверка подключения к Exchange | ✅ |
| Получение метаданных почтового ящика | ✅ |
| Список делегатов почтового ящика и уровней их прав на папки — только чтение, потому что | ✅ |
| Список серверных правил входящих | ✅ |
| Создание серверного правила входящих, например «от этого отправителя → переместить в папку» | |
| Включение/отключение правила или изменение его приоритета (другие поля здесь не обновляются) | |
| Удаление серверного правила входящих по id | |
| Получение настроек автоответа (автоматических ответов) | ✅ |
| Отключение, включение автоматических ответов или планирование окна начала/окончания |
⚠️
create_inbox_rule/update_inbox_rule/delete_inbox_ruleуправляют правилами через EWS, что удаляет клиентский блоб правил, который хранит настольный Outlook — это может стереть правила, созданные пользователем в самом Outlook. Это документированное поведение EWS, а не ошибка здесь.
Электронная почта
Инструмент | Описание | Только чтение |
| Список писем в папке | ✅ |
| Получение полного письма по id | ✅ |
| Экспорт сырого MIME-содержимого сообщения в формате RFC 822, закодированного в base64 | ✅ |
| Получение всех сообщений беседы по порядку, включая тела | ✅ |
| Поиск по подстроке (тема/тело/отправитель) или серверный Advanced Query Syntax | ✅ |
| Отправка нового письма | |
| Ответ на письмо | |
| Пересылка письма | |
| Перемещение письма в другую папку | |
| Копирование письма в другую папку | |
| Массовое перемещение с результатами по каждому элементу — один плохой id не ломает остальные | |
| Массовое копирование с результатами по каждому элементу | |
| Массовое удаление с результатами по каждому элементу (мягкое удаление, если не | |
| Удаление письма | |
| Обновление состояния прочитанности, важности или флага отслеживания | |
| Установка, добавление или удаление категорий Outlook (цветных меток) | |
| Массовая версия | |
| Массовая версия | |
| Список используемых категорий с количеством, выбранных из недавних сообщений (не из главного списка категорий почтового ящика) | ✅ |
| Список папок почтового ящика | ✅ |
| Создание папки почтового ящика | |
| Переименование папки — отказывается от встроенных папок (Входящие, Отправленные, Календарь, ...) | |
| Удаление папки и всего её содержимого — отказывается от встроенных папок | |
| Создание черновика письма | |
| Обновление черновика; пропущенные поля остаются без изменений, | |
| Отправка существующего черновика | |
| Прикрепление локального файла к сообщению, обычно к черновику — файл должен находиться в | |
| Удаление одного вложения из сообщения по id | |
| Сохранение вложения на диск | ✅ |
Календарь
Инструмент | Описание | Только чтение |
| Перечислить события календаря в диапазоне времени; передайте | ✅ |
| Получить событие календаря по id; передайте | ✅ |
| Создать событие календаря | |
| Обновить событие календаря | |
| Удалить событие календаря | |
| Принять, отклонить или предварительно ответить на приглашение | |
| Найти свободные временные слоты для встречи | ✅ |
| Массовое удаление событий с результатами по каждому элементу | |
| Массовый ответ на приглашения с результатами по каждому элементу | |
| Получить слоты свободен/занят; передайте | ✅ |
| Перечислить календари | ✅ |
| Перечислить списки комнат Room Finder (группы переговорных комнат) | ✅ |
| Перечислить переговорные комнаты в списке комнат Room Finder | ✅ |
Контакты
Инструмент | Описание | Только чтение |
| Поиск контактов | ✅ |
| Получить контакт по id | ✅ |
| Создать личный контакт | |
| Обновить личный контакт | |
| Удалить личный контакт |
Типичные сценарии использования
Подключить Claude Desktop или другой MCP-клиент к локальному Exchange
Искать сообщения во входящих и получать полное содержимое электронной почты
Отправлять или создавать черновики писем из AI-процессов
Просматривать календари и создавать встречи
Проверять окна свободен/занят для планирования
Искать личные контакты или глобальный список адресов
Предоставлять операции Exchange через контролируемую границу MCP вместо прямого скриптования почтового ящика
Замечания по безопасности
Что делает текущий код:
Ограниченное подключение | Подключается только к конечной точке Exchange/EWS, настроенной в |
Без телеметрии | Не содержит телеметрии, аналитики или логики экспорта данных третьим сторонам |
Секреты остаются локальными | Хранит секреты в переменных окружения / |
Чистые ответы об ошибках | Структурированные ответы об ошибках MCP никогда не включают исходный текст исключений Exchange, тела сообщений, содержимое вложений или пароли; успешные инструменты возвращают только те данные почтового ящика, которые были запрошены |
Чистые журналы |
|
Чистые Docker-сборки |
|
На что вам всё же следует обратить внимание:
EXCHANGE_VERIFY_SSL=falseотключает проверку TLS-сертификатов — только для доверенных внутренних/самоподписанных сред.EXCHANGE_AUTH_TYPE=Basicотправляет учетные данные в открытом виде, поэтому сервер отказывается запускаться противhttp://EXCHANGE_SERVER; переопределите это только с помощьюEXCHANGE_ALLOW_INSECURE_BASIC_AUTH=trueдля локального/тестового сервера, которым вы управляете.get_attachmentзаписывает файлы на диск, аsend_email/reply_email/forward_email/create_draftчитают локальные файлы (черезattachments) и прикрепляют их содержимое к исходящей почте. В сочетании с недоверенным содержимым электронной почты это вероятный путь для эксфильтрации любого файла, читаемого процессом, через внедрение в промпт. Локальный доступ к файлам по умолчанию запрещен и работает только после установкиEXCHANGE_ATTACHMENT_ROOTв абсолютный каталог, который затем ограничивает и путиattachments, иsave_pathизget_attachmentэтим деревом каталогов (неустановленныйsave_pathпо-прежнему использует системную временную папку).outlook-ews-mcp-smokeпо умолчанию безопасен для конфиденциальности и выводит только замаскированную информацию о почтовом ящике и счетчики; установитеOUTLOOK_MCP_SMOKE_INCLUDE_DATA=trueтолько если вы явно хотите видеть реальные данные входящих/событий в stdout.Если вы включаете ведение журнала в файл с помощью
LOG_FILE, защитите этот файл правами ОС.Если вы публикуете Docker-образы из CI, защитите доступ к проекту GitLab/GitHub и права на реестр.
Быстрый старт
uv venv
source .venv/bin/activate
uv pip install -e .[dev]
cp .env.example .env
outlook-ews-mcpПо умолчанию сервер работает в режиме stdio. Установите MCP_TRANSPORT=sse, чтобы вместо этого запустить HTTP-сервер.
Конфигурация
Минимальный .env для начала — всё остальное ниже имеет рабочий вариант по умолчанию:
EXCHANGE_SERVER=https://mail.company.com/EWS/Exchange.asmx
EXCHANGE_USERNAME=DOMAIN\username
EXCHANGE_PASSWORD=secret
EXCHANGE_EMAIL_ADDRESS=user@company.com
EXCHANGE_AUTH_TYPE=NTLMПолностью прокомментированная копия каждой переменной находится в .env.example.
Переменная | По умолчанию | Описание |
| (обязательно) | URL конечной точки EWS, например |
| (обязательно) |
|
| (обязательно) | Пароль учётной записи |
| не задано | SMTP-адрес; задаётся, когда |
|
|
|
|
| Разрешить |
|
| Проверять TLS-сертификат сервера; |
| не задано (автоопределение) | Версия сервера Exchange, например |
|
| Используется только когда Exchange сообщает неразрешимый GUID-идентификатор часового пояса; в обычной работе используется часовой пояс почтового ящика по умолчанию |
|
| Таймаут на запрос в секундах (1–300) |
|
| Бюджет ожидания по реальному времени для read-only вызовов, когда Exchange сообщает о своей занятости; это не количество повторов; |
| не задано | Почтовый ящик для олицетворения (требуются права на олицетворение Exchange) |
|
| Максимальный размер одного вложения, применяется и при загрузке, и при скачивании через |
|
| Максимальное количество вложений в одном вызове send/reply/forward/create_draft (1–100) |
|
| Максимальный суммарный размер вложений в одном вызове (1–500) |
| не задано (отключено) | Каталог, ограничивающий пути к вложениям. Если не задано, отказывает в любом локальном доступе к файлам для |
|
| Ограничение на |
|
| Ограничение на размер необработанного MIME-экспорта до расширения base64 (1–100) |
| не задано | Добавляется к исходящим текстовым телам и ответам/пересылкам. API подписи EWS не существует, поэтому это конфигурация, а не подпись Outlook почтового ящика |
| не задано | Добавляется к исходящим HTML-телам. Та же оговорка, что выше; взаимного преобразования между ними нет. Любую можно пропустить в вызове с |
|
|
|
|
| Адрес привязки, когда |
|
| Порт привязки, когда |
|
| Одновременные read-only вызовы инструментов (1–8); изменяющие вызовы всегда выполняются исключительно. См. Очередь запросов |
|
| Максимальное количество вызовов, принимаемых одновременно, выполняющихся и ожидающих (1–1000); сверх этого вызовы получают немедленную ошибку |
|
|
|
| не задано (stderr) | Путь к файлу журнала; защитите его правами ОС, если задан |
Примечания о поведении, не привязанные к отдельной переменной:
list_eventsиfind_free_slotsпринимают ограниченныйlimit(по умолчанию 200, максимум 1000); диапазоны событий ограничены 366 днями, а диапазоны свободных слотов — 31 днём, так что широкие запросы не могут порождать неограниченные ответы EWS или MCP.Списки остаются компактными по замыслу: сводки писем содержат отправителя, но не списки получателей (
get_emailих содержит),list_eventsвозвращает события без тел (get_eventих содержит), аget_emailвозвращает заголовки RFC-822 только сinclude_headers: true.Операции отправки возвращают
id: null, когда EWS не предоставляет устойчивый идентификатор для отправленной копии (в частности, для ответов, пересылок и отправленных черновиков).Метаданные вложений включают
downloadable; встроенные вложения элементов Exchange имеютdownloadable: falseи не могут быть сохранены черезget_attachment.
Очередь запросов
Клиенты отправляют несколько вызовов инструментов параллельно. Работа с Exchange блокирующая, поэтому сервер выполняет её в рабочих потоках и допускает вызовы через одну общую FIFO-очередь.
MCP_MAX_CONCURRENCY(по умолчанию4) задаёт, сколько read-only вызовов выполняется одновременно, так что агент, запрашивающий письмо, список папок и календарь, платит за самый медленный круговой путь вместо суммы. Изменяющие вызовы всегда выполняются исключительно — по одному, никогда не пересекаясь с чтением — поэтому гонки чтения/записи в общем состоянии учётной записи невозможны. Вызывающие сверх лимита ждут своей очереди, обслуживаясь в порядке поступления; ожидающая мутация блокирует более поздние чтения, не позволяя им обогнать её.MCP_MAX_QUEUE_SIZE(по умолчанию20) ограничивает, сколько вызовов может быть принято одновременно, выполняющихся или ожидающих. Когда столько уже находится в очереди, дальнейшие вызовы получают немедленную ошибкуserver_busyвместо присоединения к неограниченной очереди.Транспорт остаётся отзывчивым, пока работа выполняется. Инструменты ожидаются (await), а не выполняются в потоке цикла событий, поэтому завершённые ответы отправляются немедленно, а пинги обрабатываются, пока длинный вызов ещё выполняется.
Таймаута на вызов нет, намеренно. Поток, заблокированный на чтении сокета, нельзя убить извне; среда выполнения может только перестать ждать его, что бросает поток вместе с удерживаемой им сессией EWS. Пул сессий
exchangelibимеет жёсткий максимум и выдаёт сессии в цикле без пути отказа, поэтому утёкшие сессии в конечном итоге истощают его, и каждый последующий вызов блокируется навсегда. Медленный вызов пережидается, ограниченныйEXCHANGE_TIMEOUTплюсEXCHANGE_MAX_RETRY_WAIT_SECONDS: политика повторов учётной записи — быстрый отказ, поэтому каждый вызов EWS вызывает исключение при первой же временной ошибке, а неexchangelibповторяет его бесконечно внутри, иExchangeClientсам повторяет только read-only вызовы, ограниченные этим бюджетом реального времени. Записи никогда не повторяются автоматически. Превышения сверх ожидаемого бюджета регистрируются в журнале.
Пример для Claude Desktop
{
"mcpServers": {
"outlook": {
"command": "outlook-ews-mcp",
"env": {
"EXCHANGE_SERVER": "https://mail.company.com/EWS/Exchange.asmx",
"EXCHANGE_USERNAME": "DOMAIN\\username",
"EXCHANGE_PASSWORD": "secret",
"EXCHANGE_EMAIL_ADDRESS": "user@company.com",
"EXCHANGE_AUTH_TYPE": "NTLM"
}
}
}
}Быстрая проверка
После заполнения .env выполните:
outlook-ews-mcp-smokeВывод по умолчанию очищен для более безопасной проверки. Если вы намеренно хотите получить образцы данных почтового ящика/событий в выводе:
OUTLOOK_MCP_SMOKE_INCLUDE_DATA=true outlook-ews-mcp-smokeDocker
docker build -t outlook-ews-mcp .
docker run --rm --env-file .env outlook-ews-mcpCI/CD
GitHub Actions и GitLab CI оба запускают lint, форматирование, проверки типов, тесты, аудит
зависимостей и сборку пакетов, используя версию uv, закреплённую в pyproject.toml.
GitHub | Дополнительно публикует тегированные релизы ( |
GitLab | Дополнительно собирает и публикует Docker-образ в GitLab Container Registry на ветке по умолчанию и на тегах, используя встроенные переменные |
Поведение тегирования образов по умолчанию:
Триггер | Отправляемые теги |
Ветка по умолчанию |
|
Git-тег |
|
Разработка
uv run --python 3.12 --with '.[dev]' ruff check .
uv run --python 3.12 --with '.[dev]' pytest -qЗаметки о проекте
Реализация сосредоточена вокруг единой абстракции
ExchangeClient, чтобы аутентификация, транспорт, повторы и сопоставление ошибок оставались централизованными.Ошибки возвращаются в структурированной JSON-форме, подходящей для обработки MCP
isError=true.
Вклад в проект
Сообщения об ошибках и PR приветствуются — см. CONTRIBUTING.md о том, как настроить среду разработки и запустить тестовый набор без реального сервера Exchange. О сообщениях об уязвимостях см. SECURITY.md.
Лицензия
MIT — см. LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- 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
- FlicenseAqualityBmaintenanceMCP server for corporate Exchange that provides access to email, calendar, and people directory via OWA JSON API.20
- FlicenseAqualityBmaintenanceMCP server for Claude to access on-premises Outlook/Exchange mailboxes via EWS with NTLM authentication, providing tools for email, calendar, and contact management without relying on Microsoft 365 or Graph API.18
- AlicenseNot gradedqualityAmaintenanceA local MCP server for on-premises Microsoft Exchange, connecting via EWS and NTLM. It provides mail, template, availability, and calendar workflow tools through stdio, with draft-first safety and Windows Credential Manager integration.7MIT
Related MCP Connectors
Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.
Fully-managed email as MCP tools - register domains, real mailboxes, send and receive mail.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
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/viartemev/outlook-ews-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server