Skip to main content
Glama
lswith

imap-mcp-server

by lswith

imap-mcp

Исходный код доступен, это не продукт. Это универсальный IMAP → MCP сервер, работающий на Cloudflare Workers. Он опубликован под лицензией MIT, чтобы код можно было читать, копировать и учиться на нём, — но он создан и работает ровно с одним почтовым ящиком: личным аккаунтом iCloud. Никаких обязательств по поддержке: проблемы не обрабатываются, pull request'ы не запрашиваются, релизов нет, и ничто здесь не версионируется для чьего-либо использования. Если он вам полезен — форкните его.

Он универсален по замыслу, а не по амбициям — хост, порт и учётные данные являются конфигурацией, а не константами, — поэтому он должен работать с любым IMAP-сервером. Реально проверен только iCloud.

Статус: каркас. Пока ничего функционального не реализовано. Оба воркера — заглушки, которые устанавливаются, линтуются, проходят проверку типов, тестируются и проходят сухой прогон деплоя. См. Дорожную карту.

Что он делает

Индексирует почтовый ящик в хранилище Cloudflare, а затем предоставляет его MCP-клиенту в виде инструментов поиска и получения — так модель может отвечать на вопросы по пятнадцати годам почты, не вовлекая сам ящик в каждый запрос.

   ┌────────────────────┐  IMAP over TLS   ┌──────────────┐
   │  imap-mcp-sync     │ ───────────────▶ │   mailbox    │
   │  packages/sync     │ ◀─────────────── │   (iCloud)   │
   │  cron, owns creds  │                  └──────────────┘
   └─────────┬──────────┘
             │ writes                    ▲ writes proxied over
             ▼                           │ a service binding
   ┌────────────────────┐                │
   │  D1 (+FTS5) and R2 │                │
   └─────────┬──────────┘                │
             │ reads                     │
             ▼                           │
   ┌────────────────────┐────────────────┘   ┌──────────────┐
   │  imap-mcp-server   │  Streamable HTTP   │  MCP client  │
   │  packages/mcp      │ ◀───────────────── │  behind CF   │
   │  stateless, no creds                    │  Access      │
   └────────────────────┘                    └──────────────┘

Два воркера, и разделение между ними — это дизайн безопасности, а не выбор упаковки:

  • packages/sync (imap-mcp-sync) — единственная часть системы, которая говорит по IMAP. Он хранит пароль приложения — который в iCloud даёт полный доступ к ящику, включая отправку через SMTP, — так что эти учётные данные существуют ровно в одном месте.

  • packages/mcp (imap-mcp-server) — читатель без состояния. Он запрашивает индекс, а не ящик, и проксирует немногочисленные операции записи обратно в sync-воркер через service binding, а не открывает собственное соединение.

Related MCP server: stalwart-mail-mcp

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

pnpm install         # installs both packages
pnpm run lint        # biome check (lint + format)
pnpm run typecheck   # wrangler types + tsc --noEmit
pnpm run test        # vitest, inside workerd
pnpm run dead-code   # knip
pnpm run build       # wrangler deploy --dry-run, both workers

Для каждого пакета, из packages/sync или packages/mcp: pnpm run dev, pnpm run test:watch, pnpm run deploy.

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

Этот репозиторий публичный, поэтому никакие значения, специфичные для развёртывания, не закоммичены — ни ID аккаунта Cloudflare, ни тег зоны, ни домен команды Cloudflare Access или аудитория приложения (AUD), ни адрес почтового ящика. Ни один wrangler.jsonc не содержит account_id, и MCP-воркер вообще не объявляет маршрутов.

Всё, что вам нужно указать, названо и объяснено в .env.example. Скопируйте его в .env и заполните. Кратко:

Что

Куда помещается

CLOUDFLARE_ACCOUNT_ID

ваше окружение; wrangler читает его напрямую

Маршрут / зона для MCP-воркера

запись routes, которую вы добавляете в packages/mcp/wrangler.jsonc

ACCESS_TEAM_DOMAIN, ACCESS_AUD

vars в packages/mcp/wrangler.jsonc

IMAP_HOST, IMAP_PORT, IMAP_USER

vars в packages/sync/wrangler.jsonc

IMAP_PASSWORD

wrangler secret put, только sync-воркер — никогда не запись vars

Локально секреты помещаются в gitignored .dev.vars для каждого пакета; у каждого есть .dev.vars.example для копирования.

Оба воркера недоступны по умолчанию

workers_dev и preview_urls установлены в false в обоих файлах wrangler.jsonc, и MCP-воркер не объявляет маршрутов. Поэтому свежее развёртывание недоступно из интернета. Это сделано намеренно: без ограничения папок конечная точка MCP функционально является доступом на чтение ко всему почтовому ящику, поэтому она не должна стать доступной, пока перед ней не будет Cloudflare Access. Без workers_dev: false воркер доступен по адресу <name>.<account>.workers.dev независимо от существующих маршрутов или политик Access.

Полное руководство по развёртыванию с нуля — секреты, настройка Access, привязки, миграции и обратное заполнение — ещё не написано; оно появится вместе с остальной системой.

Дорожная карта

Отслеживается как issues в этом репозитории:

#2

Каркас репозитория — это

#3

Вендорить IMAP-клиент за внутренним интерфейсом

#4

Схема D1 и миграции

#5

Трассировщик: синхронизировать одну папку в D1

#6

Фан-аут очереди для пути синхронизации

#7

MCP-сервер и search_messages

#8

Инкрементальная синхронизация: водяные знаки и UIDVALIDITY

#9

Вложения в R2, с извлечением текста

#10

Ограничить конечную точку MCP с помощью Access Managed OAuth

#11

get_message и get_thread

#12

Инструменты записи через service binding, с журналом аудита

#13

Полное обратное заполнение и руководство по настройке

Спайк решил единственный вопрос, от которого зависела вся архитектура, — может ли Cloudflare Worker вообще говорить по IMAP с iCloud? Может: TLS и LOGIN на порту 993 за 755 мс, папки перечислены, сообщения получены и декодированы из MIME, черновик добавлен и помечен. Так что путь синхронизации — это Worker, и ничего не переносится в Container. Выводы, которые ограничивают дизайн, — порядок CONDSTORE, отсутствие MOVE в iCloud, непригодность SEARCH для содержимого — записаны в соответствующие тикеты.

Лицензия

MIT — см. LICENSE.

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

Maintenance

Maintainers
<1hResponse time
Release cycle
1Releases (12mo)
Commit activity

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
    Not graded
    quality
    B
    maintenance
    Connects multiple IMAP and SMTP mailboxes to MCP clients like ChatGPT without exposing credentials, enabling email search and thread retrieval via natural language.
    1
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects AI agents to self-hosted Stalwart mail servers via a Cloudflare Worker and JMAP, enabling mailbox search, reading, listing, and two-step draft-and-send email operations through MCP.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables interaction with Gmail through MCP, supporting search, read, send, reply, forward, draft management, labels, and multiple accounts, deployed on Cloudflare Workers.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables connecting Gmail to MCP clients, allowing search, read, send, reply-all, forward, attachments, drafts, labels, and thread management across multiple Google accounts at once via a self-hosted Cloudflare Worker.
    MIT

View all related MCP servers

Related MCP Connectors

  • Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.

  • Hosted email MCP for AI agents with inboxes, send/receive, memory, recovery, and credits.

  • Cloudflare Workers MCP server: email-validator

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/lswith/imap-mcp'

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