Skip to main content
Glama

useful-outlook-mcp

Удалённый MCP-сервер для Microsoft Outlook с корректным OAuth2 и инструментами, оптимизированными для агентов.

Возможности

  • Соответствие спецификациям: метаданные OAuth RFC 9728/8414, динамическая регистрация клиентов RFC 7591

  • Stateless OAuth: токены управляются клиентом, а не сервером — как и задумано в OAuth

  • Инструменты, оптимизированные для агентов: обширная инженерия промптов в описаниях инструментов

  • Динамические области: области OAuth автоматически подстраиваются под включённые инструменты

  • Готовность к продакшену: Docker, ограничение скорости, режим только для чтения, фильтрация инструментов

Related MCP server: M365 MCP Server

Быстрый старт

npm install
npm run build
npm start  # Server at http://localhost:3000

Требуемое окружение:

MS365_MCP_CLIENT_ID=your-azure-ad-client-id
MS365_MCP_CLIENT_SECRET=your-azure-ad-client-secret
MS365_MCP_TENANT_ID=your-tenant-id  # or 'common'

Настройка Azure AD

  1. Портал Azure → Microsoft Entra ID → Регистрация приложений → Создать

  2. Добавьте делегированные разрешения: User.Read, Mail.Read, Mail.ReadWrite, Mail.Send, Calendars.Read, Calendars.ReadWrite, Calendars.Read.Shared, Place.Read.All, People.Read, offline_access

  3. Добавьте URI перенаправления: http://localhost:6274/oauth/callback (для MCP Inspector)

  4. Сертификаты и секреты → Создать секрет клиента → Скопируйте значение

  5. Скопируйте Client ID, Client Secret и Tenant ID в ваш .env

Инструменты

Почта

list-mail-folders · list-mail-messages · search-mail · get-mail-message · send-mail · create-draft-mail · reply-mail · reply-all-mail · create-reply-draft · create-reply-all-draft · delete-mail-message · move-mail-message

Календарь

list-calendars · list-calendar-events · search-calendar-events · find-meeting-times · get-calendar-event · get-calendar-view · create-calendar-event · update-calendar-event · delete-calendar-event

Люди

lookup-contact-email

Поиск переговорных

Для очных встреч find-meeting-times автоматически:

  • Получает все доступные переговорные комнаты в вашей организации

  • Включает их в проверку доступности вместе с участниками

  • Группирует свободные комнаты по местоположению (город/здание)

  • Возвращает только доступные комнаты с адресами электронной почты для бронирования

Установите isOnlineMeeting: false, чтобы включить поиск комнат. Для онлайн-встреч (по умолчанию: true) ссылки на собрания Teams создаются автоматически.

Требуемая область: Place.Read.All (добавьте в разрешения приложения Azure AD)

Конфигурация

Переменная

По умолчанию

Описание

MS365_MCP_CLIENT_ID

обязательно

Идентификатор клиента Azure AD

MS365_MCP_CLIENT_SECRET

-

Секрет клиента (необязательно)

MS365_MCP_TENANT_ID

common

Идентификатор клиента

MS365_MCP_PORT

3000

Порт сервера

MS365_MCP_READ_ONLY_MODE

false

Отключить операции записи

MS365_MCP_ENABLED_TOOLS

все

Разрешённые инструменты (через запятую)

MS365_MCP_CORS_ORIGIN

*

Источники CORS

MS365_MCP_RATE_LIMIT_REQUESTS

30

Запросов за окно

MS365_MCP_RATE_LIMIT_WINDOW_MS

60000

Размер окна (мс)

MS365_MCP_ALLOWED_TENANTS

-

Ограничить конкретными клиентами

Docker

Из GitHub Container Registry:

docker run -p 3000:3000 \
  -e MS365_MCP_CLIENT_ID=xxx \
  -e MS365_MCP_CLIENT_SECRET=xxx \
  -e MS365_MCP_TENANT_ID=xxx \
  ghcr.io/Leonine-Studios/useful-outlook-mcp:latest

Или соберите локально:

docker build -t useful-outlook-mcp .
docker run -p 3000:3000 \
  -e MS365_MCP_CLIENT_ID=xxx \
  -e MS365_MCP_CLIENT_SECRET=xxx \
  -e MS365_MCP_TENANT_ID=xxx \
  useful-outlook-mcp

Конечные точки

Конечная точка

Описание

POST /mcp

Протокол MCP

GET /health

Проверка здоровья

GET /.well-known/oauth-protected-resource

RFC 9728

GET /.well-known/oauth-authorization-server

RFC 8414

GET /authorize

OAuth (проксирует в Microsoft)

POST /token

Обмен токена (проксирует в Microsoft)

POST /register

Динамическая регистрация клиента

Тестирование

npm run dev
npx @modelcontextprotocol/inspector  # Connect to http://localhost:3000/mcp

Примечания по дизайну

Проблемы существующих серверов

  1. Устаревшая архитектура: созданы как stdio с HTTP-надстройкой. Этот сервер изначально HTTP-нативный.

  2. Неправильный OAuth: большинство серверов хранят токены на стороне сервера. Этот сервер не сохраняет состояние — токены передаются в каждом запросе через заголовок Authorization и никогда не хранятся.

  3. Инструменты без продуманности: типичные серверы сопоставляют конечные точки API 1:1 без рекомендаций. Агенты терпят неудачу на практике, потому что не знают особенностей API или многошаговых рабочих процессов.

Что отличается

Каждый инструмент включает:

  • Когда его использовать по сравнению с альтернативами

  • Известные особенности Graph API (их много)

  • Рекомендации по рабочим процессам для многошаговых задач

  • Комбинации параметров, которые приводят к ошибкам

Пример: find-meeting-times объясняет, что требуются адреса электронной почты (имена не работают), как найти адреса по именам с помощью search-mail, что означает OrganizerUnavailable, и что isOrganizerOptional=true требует подтверждения пользователя.

Известные особенности Graph API

  • Фильтрация отправителя почты: eq по from/emailAddress/address ненадёжен — используйте startswith()

  • Фильтрация получателей почты: нельзя фильтровать по to/cc/bcc с помощью $filter — используйте $search

  • Фильтрация организатора календаря: $filter по email организатора возвращает 500 — фильтруется на стороне клиента

  • Параллелизм: параллельные вызовы могут возвращать ошибки MailboxConcurrency

  • Поиск и сортировка: $search нельзя комбинировать с $orderby

Лицензия

MIT

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    MCP server that provides 62 tools to manage Outlook mail, calendar, contacts, and tasks for personal Microsoft accounts via Microsoft Graph API.
    71
    1,021 PyPI
    40
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for sending and managing Microsoft Outlook email via the Microsoft Graph API, including drafts, replies, contacts, and directory search.
    182 npm
    MIT