Skip to main content
Glama
wyattjoh
by wyattjoh

JMAP MCP сервер

JSR JSR Score JSR Scope

Сервер протокола контекста модели (MCP), предоставляющий инструменты для взаимодействия с почтовыми серверами JMAP (JSON Meta Application Protocol). Создан на базе Deno с использованием клиентской библиотеки @htunnicliff/jmap-jam.

Функции

Инструменты управления электронной почтой

  • Поиск писем: Поиск писем по текстовым запросам, фильтрам отправителя/получателя, диапазонам дат и ключевым словам. Все фильтры объединяются логическим И.

  • Получение писем: Получение конкретных писем по ID с возможностью выбора свойств.

  • Получение цепочек: Получение цепочек писем (истории переписки).

  • Пометка писем: Пометка писем как прочитанных/непрочитанных, отмеченных флажком/снятых с флажка.

  • Перемещение писем: Перемещение писем между почтовыми ящиками.

  • Удаление писем: Окончательное удаление писем.

Управление почтовыми ящиками

  • Получение почтовых ящиков: Список всех почтовых ящиков/папок с поддержкой иерархии. Используйте это для поиска ID ящиков, необходимых другим инструментам.

Инкрементальная синхронизация

  • Получение изменений писем: Получение ID писем, созданных, обновленных или удаленных с момента предыдущего состояния (отслеживание изменений на основе состояния).

  • Получение обновлений поиска: Получение добавлений/удалений в рамках предыдущего поискового запроса с момента его последнего queryState.

Составление писем

  • Отправка письма: Составление и отправка новых писем с поддержкой обычного текста и HTML.

  • Ответ на письмо: Ответ на существующие письма с автоматической обработкой заголовков и поддержкой функции «ответить всем».

Ключевые возможности

  • Полная поддержка JMAP RFC 8620/8621 через jmap-jam

  • Комплексная проверка входных данных с помощью схем Zod

  • Поддержка пагинации для всех операций со списками

  • Инкрементальная синхронизация на основе состояния для эффективного опроса

  • Расширенная обработка ошибок и управление соединениями

  • Регистрация инструментов на основе возможностей (только чтение, отправка)

  • Поддержка TypeScript со строгой типизацией

Related MCP server: bare-mcp

Установка

Плагин Claude Code (рекомендуется)

Установите через маркетплейс плагинов:

/plugin marketplace add wyattjoh/claude-code-marketplace
/plugin install jmap-mcp@wyattjoh-marketplace

Затем настройте необходимые переменные окружения в настройках вашего MCP-сервера.

Предварительные требования

  • Deno версии 1.40 или выше

  • Почтовый сервер с поддержкой JMAP (например, Cyrus IMAP, Stalwart Mail Server, FastMail)

  • Действующие учетные данные для аутентификации JMAP

Настройка

Добавьте следующее в выбранный вами агент:

{
  "mcpServers": {
    "jmap": {
      "type": "stdio",
      "command": "deno",
      "args": [
        "run",
        "--allow-net=api.fastmail.com",
        "--allow-env=JMAP_SESSION_URL,JMAP_BEARER_TOKEN,JMAP_ACCOUNT_ID",
        "jsr:@wyattjoh/jmap-mcp@0.6.3"
      ],
      "env": {
        "JMAP_SESSION_URL": "https://api.fastmail.com/jmap/session",
        "JMAP_BEARER_TOKEN": "YOUR_API_TOKEN"
      }
    }
  }
}

Замените api.fastmail.com в --allow-net на имя хоста вашего JMAP-сервера, если вы не используете FastMail.

Использование

Переменные окружения

Переменная

Обязательно

Описание

JMAP_SESSION_URL

Да

URL сессии JMAP-сервера (обычно заканчивается на /.well-known/jmap)

JMAP_BEARER_TOKEN

Да

Токен носителя (Bearer token) для аутентификации

JMAP_ACCOUNT_ID

Нет

ID аккаунта (определяется автоматически, если не указан)

Доступные инструменты

get_mailboxes

Список почтовых ящиков/папок с их ID, именами и метаданными. Вызывайте это первым, чтобы получить ID ящиков, необходимые для search_emails (inMailbox) и move_emails (mailboxId). Распространенные имена: Inbox, Drafts, Sent, Trash, Archive, Spam/Junk.

Параметры:

  • parentId (необязательно): Фильтр по ID родительского ящика

  • limit (необязательно): Максимальное количество результатов (1-200, по умолчанию: 100)

  • position (необязательно): Начальная позиция для пагинации

search_emails

Поиск писем с фильтрами. Все фильтры объединяются логическим И. Возвращает только ID писем — используйте get_emails для получения содержимого. Результаты включают queryState для инкрементальной синхронизации через get_search_updates.

Параметры:

  • query (необязательно): Текстовый поиск по всем полям

  • body (необязательно): Поиск только в теле сообщения

  • from (необязательно): Фильтр по адресу отправителя

  • to (необязательно): Фильтр по адресу получателя

  • subject (необязательно): Фильтр по тексту темы

  • inMailbox (необязательно): ID ящика для поиска (получите из get_mailboxes)

  • hasKeyword (необязательно): Фильтр по ключевому слову (например, $seen, $flagged)

  • notKeyword (необязательно): Исключение по ключевому слову (например, $seen, $draft)

  • allInThreadHaveKeyword (необязательно): Все письма в цепочке должны иметь ключевое слово

  • someInThreadHaveKeyword (необязательно): Хотя бы одно письмо в цепочке должно иметь ключевое слово

  • before (необязательно): Только письма до даты (ISO 8601)

  • after (необязательно): Только письма после даты (ISO 8601)

  • limit (необязательно): Максимальное количество результатов (1-100, по умолчанию: 50)

  • position (необязательно): Начальная позиция для пагинации (по умолчанию: 0)

get_emails

Получение конкретных писем по их ID. Используйте properties для запроса только необходимых данных — получение всех свойств возвращает большие объемы данных.

Параметры:

  • ids: Массив ID писем (1-50 ID)

  • properties (необязательно): Конкретные свойства для возврата. Рекомендуемые наборы:

    • Кратко: ["id", "subject", "from", "to", "receivedAt", "preview"]

    • Полное чтение: ["id", "subject", "from", "to", "cc", "receivedAt", "bodyValues", "textBody", "htmlBody"]

    • Примечание: Чтобы получить содержимое тела, включите bodyValues И textBody/htmlBody

get_threads

Получение цепочек писем по их ID. ID цепочек приходят из ответов get_emails (свойство threadId). Возвращает ID писем в цепочке — используйте get_emails для этих ID, чтобы получить содержимое.

Параметры:

  • ids: Массив ID цепочек (1-20 ID)

get_email_changes

Получение ID писем, созданных, обновленных или удаленных с момента предыдущего состояния. Используйте строку state из ответа get_emails.

Параметры:

  • sinceState: Строка состояния из предыдущего ответа get_emails

  • maxChanges (необязательно): Максимальное количество изменений (1-500)

  • fetchEmails (необязательно): Автоматическое получение полных деталей писем для измененных ID (по умолчанию: false)

  • properties (необязательно): Свойства для получения, если fetchEmails равно true

get_search_updates

Получение изменений в рамках предыдущего поискового запроса с момента его queryState. Необходимо использовать те же параметры фильтра, что и в исходном вызове search_emails.

Параметры:

  • sinceQueryState: queryState из предыдущего ответа search_emails

  • Все параметры фильтра из search_emails (должны совпадать с исходным запросом)

  • maxChanges (необязательно): Максимальное количество изменений (1-500)

mark_emails

Пометка писем как прочитанных/непрочитанных или отмеченных/снятых с флажка.

Параметры:

  • ids: Массив ID писем (1-100 ID)

  • seen (необязательно): Пометить как прочитанное (true) или непрочитанное (false)

  • flagged (необязательно): Пометить как отмеченное (true) или снятое с флажка (false)

move_emails

Перемещение писем в другой ящик. Используйте get_mailboxes для поиска ID целевого ящика.

Параметры:

  • ids: Массив ID писем (1-100 ID)

  • mailboxId: ID целевого ящика (получите из get_mailboxes)

delete_emails

Окончательное удаление писем (нельзя отменить). Рекомендуется перемещение в корзину через move_emails для возможности восстановления.

Параметры:

  • ids: Массив ID писем (1-100 ID)

send_email

Отправка нового письма. Требуется textBody или htmlBody (или оба).

Параметры:

  • to: Массив получателей (name необязательно, email обязательно)

  • cc (необязательно): Массив получателей копии

  • bcc (необязательно): Массив получателей скрытой копии

  • subject: Тема письма

  • textBody (необязательно): Тело письма в обычном тексте

  • htmlBody (необязательно): Тело письма в HTML

  • identityId (необязательно): ID личности JMAP для отправки (используется значение по умолчанию сервера, если пропущено)

reply_to_email

Ответ на существующее письмо. Автоматически устанавливает To/CC, префикс темы Re: и заголовки цепочки (In-Reply-To, References).

Параметры:

  • emailId: ID письма для ответа

  • replyAll (необязательно): Включить всех исходных получателей (по умолчанию: false)

  • subject (необязательно): Пользовательская тема ответа (по умолчанию Re: <оригинал>)

  • textBody (необязательно): Тело письма в обычном тексте

  • htmlBody (необязательно): Тело письма в HTML

  • identityId (необязательно): ID личности JMAP для отправки (используется значение по умолчанию сервера, если пропущено)

Совместимость с JMAP-серверами

Этот сервер должен работать с любым почтовым сервером, поддерживающим JMAP, включая:

Разработка

Запуск в режиме разработки

just watch          # Run with file watching
just start          # Run without watching

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

just test           # Run all tests
just check          # Format check + lint + type check
just fmt            # Auto-format code

Архитектура

Сервер построен с использованием:

  • Deno: Современная среда выполнения JavaScript/TypeScript

  • @modelcontextprotocol/sdk: Фреймворк MCP-сервера

  • jmap-jam: Легковесный типизированный JMAP-клиент

  • Zod: Проверка типов во время выполнения

Безопасность

  • Все входные данные проверяются с помощью схем Zod

  • Переменные окружения используются для конфиденциальной конфигурации

  • Никакие секреты не логируются и не раскрываются в ответах

  • Соблюдаются лучшие практики безопасности JMAP

Вклад в проект

  1. Сделайте форк репозитория

  2. Создайте ветку для новой функции

  3. Вносите изменения, следуя стилю функционального программирования

  4. Тщательно протестируйте изменения

  5. Отправьте pull request

Лицензия

Лицензия MIT — подробности см. в файле LICENSE.

Связанные проекты

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
22hResponse time
3dRelease cycle
7Releases (12mo)
Commit activity
Issues opened vs closed

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

  • A
    license
    A
    quality
    B
    maintenance
    Local MCP server for multi-account IMAP/SMTP email (iCloud + Gmail via app-specific passwords). Never marks mail read. Cross-folder search, idempotent sends, TLS verified.
    8
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A minimal, general-purpose implementation of the Model Context Protocol (MCP) for Node.js and Bare runtime, enabling creation of AI-interactive servers with tools, resources, and multiple transport options.
    7
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Unified MCP server for Fastmail email (JMAP), calendar (CalDAV), and contacts (CardDAV). Enables sending emails, managing events, and syncing contacts through natural language.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server exposing JMAP email and Sieve script operations as tools, enabling mailbox management, email creation, search, flagging, and Sieve script management.
    1

View all related MCP servers

Related MCP Connectors

  • MCP server for interacting with the Supabase platform

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

  • Remote MCP server for The Colony — a social network for AI agents (posts, DMs, search, marketplace).

View all MCP Connectors

Latest Blog Posts

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/wyattjoh/jmap-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server