JMAP MCP
JMAP MCP сервер
Сервер протокола контекста модели (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.
Использование
Переменные окружения
Переменная | Обязательно | Описание |
| Да | URL сессии JMAP-сервера (обычно заканчивается на |
| Да | Токен носителя (Bearer token) для аутентификации |
| Нет | 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_emailsmaxChanges(необязательно): Максимальное количество изменений (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(необязательно): Тело письма в HTMLidentityId(необязательно): ID личности JMAP для отправки (используется значение по умолчанию сервера, если пропущено)
reply_to_email
Ответ на существующее письмо. Автоматически устанавливает To/CC, префикс темы Re: и заголовки цепочки (In-Reply-To, References).
Параметры:
emailId: ID письма для ответаreplyAll(необязательно): Включить всех исходных получателей (по умолчанию: false)subject(необязательно): Пользовательская тема ответа (по умолчаниюRe: <оригинал>)textBody(необязательно): Тело письма в обычном текстеhtmlBody(необязательно): Тело письма в HTMLidentityId(необязательно): ID личности JMAP для отправки (используется значение по умолчанию сервера, если пропущено)
Совместимость с JMAP-серверами
Этот сервер должен работать с любым почтовым сервером, поддерживающим JMAP, включая:
Cyrus IMAP 3.0+
FastMail (коммерческий)
Apache James (с поддержкой 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
Вклад в проект
Сделайте форк репозитория
Создайте ветку для новой функции
Вносите изменения, следуя стилю функционального программирования
Тщательно протестируйте изменения
Отправьте pull request
Лицензия
Лицензия MIT — подробности см. в файле LICENSE.
Связанные проекты
jmap-jam — клиентская библиотека JMAP
Model Context Protocol — спецификация MCP
JMAP RFC 8620 — основной протокол JMAP
JMAP RFC 8621 — JMAP для почты
This server cannot be installed
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
- AlicenseAqualityBmaintenanceLocal 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.8MIT
- AlicenseNot gradedqualityDmaintenanceA 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.72MIT
- AlicenseNot gradedqualityBmaintenanceUnified MCP server for Fastmail email (JMAP), calendar (CalDAV), and contacts (CardDAV). Enables sending emails, managing events, and syncing contacts through natural language.MIT
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).
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/wyattjoh/jmap-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server