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: gmail-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.

Related MCP Connectors

Related MCP Servers

  • 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.
    129 npm
    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
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables searching, reading full conversations, and sending email across multiple IMAP/SMTP mailboxes from any MCP client, with multi-user support and per-user API tokens.
    MIT