outlook-mcp-server
outlook-mcp-server
Локальный MCP сервер, который даёт Claude (Desktop или Code) доступ на чтение/запись к личной почте Hotmail / Outlook.com через Microsoft Graph API, используя поток авторизационного кода OAuth 2.0 (с PKCE) против платформы удостоверений Microsoft.
Он предоставляет шесть инструментов: list_messages, get_message, search_messages, send_message, create_draft и list_folders.
Всё выполняется локально через stdio — здесь нет размещённого сервиса, и ваша почта никогда не проходит ни через что, кроме вашей машины и собственного Graph API Microsoft.
Как это работает
Аутентификация: MSAL Node выполняет поток авторизационного кода + PKCE против
https://login.microsoftonline.com/consumers(только личные учётные записи — см. Выбор арендатора), используя кратковременный локальный HTTP-сервер как цель перенаправления. Токеры (включая refresh-токенoffline_access) кэшируются и незаметно обновляются при последующих запусках.Хранилище: кэш токенов сериализуется MSAL, шифруется AES-256-GCM с локально сгенерированным ключом и записывается в
~/.outlook-mcp-server/token-cache.enc(режим0600). Сам ключ находится в~/.outlook-mcp-server/cache.key(также0600). См. замечания по безопасности относительно модели угроз, которую это (не) покрывает.Вызовы Graph: тонкий Fetch-клиент вызывает
https://graph.microsoft.com/v1.0/...с текущим токеном доступа.MCP-сервер: построен на
@modelcontextprotocol/sdk, говорит через stdio, поэтому может быть запущен непосредственно Claude Desktop / Claude Code как дочерний процесс.
Related MCP server: Outlook MCP Python
Предварительные требования
Node.js 18+
Учётная запись Microsoft (Hotmail, Outlook.com или Live) — почтовый ящик, к которому Claude должен получить доступ.
Бесплатная Azure-учётная запись для регистрации приложения допуска, он не должен быть платной подпиской Azure.
1. Установка
git clone <this repo>
cd outlook-mcp-server
npm install2. Регистрация приложения в Azure Portal
Эта регистрация выдаёт идентификатор клиента, который этот сервер использует для доступа к Microsoft Graph от вашего имени. npm run setup (ниже) проведёт вас через это интерактивно, но шаги такие:
Перейдите на portal.azure.com и войдите с любой учётной записью Microsoft.
Найдите Регистрации приложений → + Новая регистрация.
Заполните форму:
Имя: любое, например
outlook-mcp-server.Поддерживаемые типы учётных записей: «Только личные учётные записи Microsoft». Это ограничивает приложение учётными записями Hotmail/Outlook.com/Live, а не рабочими/учебными (Azure AD) арендаторами.
URI перенаправления: платформа «Публичный клиент/нативный (мобильные и настольные)», значение
http://localhost:8765/callback(или другой порт — просто будьте последовательны, когда скрипт настройки спросит).
Нажмите Зарегистрировать, затем скопируйте Идентификатор приложения (клиента) на странице обзора.
Перейдите в Разрешения API → + Добавить разрешение → Microsoft Graph → Делегированные разрешения и добавьте:
Mail.ReadMail.ReadWriteMail.Sendoffline_access(часто присутствует по умолчанию)
Делегированные разрешения для личных учётных записей Microsoft не требуют согласия администратора — вы сами согласитесь при входе в шаге 3 ниже.
(Необязательно, дополнительно) Если вы предпочитаете использовать конфиденциальный клиент с секретом клиента вместо потока PKCE для публичного клиента, добавьте платформу Web с URI перенаправления и создайте секрет в разделе Сертификаты и секреты. Большинству людей следует пропустить этот шаг.
3. Настройка (аутентификация + конфигурация)
npm run setupЭто:
Выведет приведённый выше пошаговый инструктор.
Запросит идентификатор клиента (и необязательный секрет / аренду / URI перенаправления) и сохранит его в
~/.outlook-mcp-server/config.json.Откроет браузер для входа и согласия.
Проверит, что токен работает, вызвав
GET /meи напечатав ваше имя/почту.Выведет JSON-фрагмент для добавления в вашу конфигурацию Claude (см. ниже).
Позже вы сможете пройти аутентификацию заново (отозванный токен, смена аккаунта и т.д.) без повторного ввода данных регистрации приложения:
npm run login4. Сборка и регистрация в Claude
npm run buildClaude Desktop — добавьте в claude_desktop_config.json
(~/Library/Application Support/Claude/claude_desktop_config.json на macOS,
%APPDATA%\Claude\claude_desktop_config.json на Windows):
{
"mcpServers": {
"outlook": {
"command": "node",
"args": ["/absolute/path/to/outlook-mcp-server/dist/src/index.js"]
}
}
}Claude Code:
claude mcp add outlook -- node /absolute/path/to/outlook-mcp-server/dist/src/index.jsПерезапустите Claude Desktop / Claude Code. Нижеописанные инструменты должны стать доступны.
Инструменты
Инструмент | Описание |
| Получение списка сообщений из папки (по умолчанию |
| Получение полного содержимого (тело, все получатели) одного сообщения по идентификатору. |
| Полнотекстовый поиск ( |
| Отправка email немедленно ( |
| Создание черновика в папке «Черновики» без отправки. |
| Получение списка почтовых папок и их идентификаторов для использования с параметром |
Все инструменты возвращают JSON (как текстовое содержимое MCP) и при ошибках Graph API возвращают ошибки инструмента вместо краха сервера.
Выбор аренды
По умолчанию используется тенант consumers
(https://login.microsoftonline.com/consumers), который принимает только личные учётные записи Microsoft (Hotmail/Outlook.com/Live) — рабочая или учебная учётная запись будет отклонена при входе. Если нужно поддерживать и личные, и Azure AD учётные записи, задайте тенант как common во время npm run setup (или через OUTLOOK_MCP_TENANT=common). Этот проект разработан и протестирован для случая личных учётных записей (consumers).
Этот проект.
Справочник по конфигурации
Всё можно задать через npm run setup (записывается в
~/.outlook-mcp-server/config.json) или через переменные окружения, которые имеют приоритет — см. .env.example:
Переменная | Назначение |
| Идентификатор клиента регистрации Azure app. |
| Только если используется конфиденциальный клиент (платформа Web). |
|
|
| Должен совпадать с регистрацией приложения Azure. |
| Где хранятся конфигурация/кэш токенов. По умолчанию |
Примечания по безопасности
the token cache is encrypted at rest with a locally-generated AES-256-GCM key (
~/.outlook-mcp-server/cache.key, mode0600). This protects against casual disclosure — accidental commits, backups, other unprivileged users on a shared machine — but not against an attacker who already has read access to your user account's files, since the key sits next to the encrypted cache. For stronger protection, swap theICachePlugininsrc/auth/tokenCache.tsfor one backed by your OS keychain (e.g. viakeytar) — the plugin interface is intentionally isolated to that one file.Never commit
~/.outlook-mcp-server/(it's outside the repo by default) or a.envfile containingOUTLOOK_MCP_CLIENT_SECRET.send_messagesends immediately with no confirmation step inside this server — Claude is expected to confirm intent with you before calling it for anything sensitive. Prefercreate_draftwhen you want a review step.Requested scopes are limited to
Mail.Read,Mail.ReadWrite,Mail.Send, andoffline_access— no calendar, contacts, or broaderMail.*application-level access.
Troubleshooting
AADSTS50020/ “user account ... does not exist in tenant” — you're hitting a tenant that doesn't accept personal accounts, or you're signing in with a work/school account againstconsumers. Confirm the app registration's “Supported account types” is “Personal Microsoft accounts only” andOUTLOOK_MCP_TENANTisconsumers(orcommonif you intentionally want both).AADSTS50011/ redirect URI mismatch — theredirectUriin~/.outlook-mcp-server/config.jsonmust exactly match a redirect URI configured on the Azure app registration, including the port.“Not signed in” tool errors — run
npm run login.Port already in use during setup/login — another process is using the redirect URI's port; stop it, or reconfigure the app registration and
npm run setupwith a different port.
Разработка
npm run dev # run the MCP server directly from TypeScript (stdio)
npm run build # compile to dist/
npm run clean # remove dist/Структура проекта
src/
index.ts MCP server entrypoint (stdio transport)
config.ts Config loading (env + config file)
auth/
crypto.ts AES-256-GCM file encryption helpers
tokenCache.ts MSAL ICachePlugin backed by crypto.ts
msalClient.ts MSAL app factory + silent token acquisition
loginFlow.ts Interactive loopback OAuth flow
graph/
client.ts Generic Microsoft Graph fetch wrapper
mail.ts Mail-specific Graph calls
types.ts Graph response types
tools/ One file per MCP tool, registered in index.ts
scripts/
setup.ts Interactive one-time (and re-runnable) setupMaintenance
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
- AlicenseBqualityCmaintenanceA MCP server for Claude that reads Outlook emails its attachments through the Microsoft Graph API.616MIT
- FlicenseNot gradedqualityDmaintenanceA Python-based MCP server for Microsoft Outlook integration using Microsoft Graph API, enabling email reading/sending, calendar management, and contact operations through Claude Desktop.1
- AlicenseNot gradedqualityDmaintenanceMCP server that enables Claude to manage Outlook emails, including reading, sending, organizing, drafting, and bulk operations via Microsoft Graph API.151MIT
- AlicenseAqualityBmaintenanceAn MCP server that gives Claude Code and Codex full control of a personal Outlook.com mailbox and calendar via the Microsoft Graph API, enabling mail, draft, folder, and calendar operations through natural language.311MIT
Related MCP Connectors
Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
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/acangialosi/outlook-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server