cfmail
cfmail · Дайте вашему агенту почтовый ящик, которым он может пользоваться самостоятельно
Английский | 简体中文
Что это такое
Цель проста: дать агенту возможность самостоятельно получать и отправлять email — без участия человека, который пересылает, одобряет или нажимает «Отправить» в процессе. Сервис работает на Cloudflare и не имеет веб-интерфейса — это не почтовый ящик для просмотра, а ящик, которым AI/программа пользуется как собственным.
Письма, отправленные на
anything@your-domain, автоматически перехватываются и сохраняются. Агент сам ищет их, читает полный текст, отвечает и пересылает вложения — вам не нужно пересылать ему письма, и ему не нужно ждать, пока вы нажмёте «Отправить».
Someone emails you ──▶ Cloudflare receives it ──▶ parsed automatically, stored in a database and object storage
│
Agent ──asks a question / sends mail──▶ cfmail CLI (or MCP directly) ──▶ this service's API ──┘Стоимость запуска почти нулевая — бесплатных тарифов Cloudflare и Resend достаточно, и ни один из них не требует кредитной карты:
Компонент | Бесплатный тариф |
Приём почты (Cloudflare Email Routing) | Безлимитно, бесплатно по своей сути |
Работа сервиса (Cloudflare Workers) | 100 000 запросов/день |
Хранение тел писем и индекса (Cloudflare D1) | 5 ГБ, 5M чтений/день |
Хранение исходных вложений (Cloudflare R2) | 10 ГБ/месяц |
Отправка почты (Resend, бэкенд по умолчанию) | 3 000/месяц, 100/день |
Для небольшого проекта, которым пользуется один человек или несколько агентов, эти лимиты трудно превысить; обновите тариф позже, если объём действительно вырастет.
Он подходит для таких ситуаций:
Дать агенту почтовый ящик, который действительно принадлежит ему, чтобы он мог самостоятельно выполнить весь цикл «получить → понять → ответить/переслать» без ручных действий между шагами.
Получать коды подтверждения, уведомления, счета, инвойсы на свой домен и позволить ИИ находить и систематизировать их для вас.
Синхронизировать почту — тела и вложения — на локальный диск по расписанию и получать в чат сообщение с кликабельной ссылкой на локальный файл в момент поступления нового письма.
Технические детали (схема базы данных, дизайн поиска, структура компонентов, двойная схема бэкенда отправки) — в ARCHITECTURE.md.
Этот документ состоит из двух частей: Настройка — развертывание сервиса в вашем собственном аккаунте Cloudflare; и Использование — после развертывания, как дать агенту возможность отправлять и получать почту.
Related MCP server: gmail-mcp
Настройка: развертывание в Cloudflare (около 10 минут)
Всё происходит в вашем собственном аккаунте Cloudflare — почта всегда живёт только в вашем аккаунте, и никто другой не может к ней обратиться.
Что вам понадобится
Аккаунт Cloudflare (бесплатного тарифа достаточно).
Домен, уже добавленный в этот аккаунт (используется и для приёма почты, и для доступа к сервису).
Установленный локально Node.js 18 или новее.
Шаг 0: получите код, войдите в систему, создайте локальную конфигурацию
git clone <this-repo> && cd cfmail
npm install
npx wrangler login # log into your Cloudflare account in the browser
cp wrangler.jsonc wrangler.local.jsonc # your private config, never pushed to the repoВсё, что привязано к вашему аккаунту — домен, ID базы данных — хранится в
wrangler.local.jsonc. Он уже в.gitignore; все команды ниже подхватывают его автоматически.
Шаг 1: создайте базу данных (хранит метаданные и тела писем)
npx wrangler d1 create email_dbКоманда выведет database_id — скопируйте его в wrangler.local.jsonc в поле d1_databases[0].database_id.
Шаг 2: создайте объектное хранилище (хранит исходные письма и вложения)
npx wrangler r2 bucket create email-storeШаг 3: укажите ваш домен
Откройте wrangler.local.jsonc и измените routes[0].pattern на любой желаемый поддомен, например mail.yourdomain.com (это должен быть домен в вашем аккаунте Cloudflare). Этот адрес агент будет использовать для подкючения.
Шаг 4: создайте таблицы, задайте пароль доступа, разверните
npm run db:remote # create the tables
npx wrangler secret put MCP_TOKEN # set an access password (see below)
npm run deploy # deployПароль доступа: после выполнения этой команды вставьте достаточно длинную случайную строку в качестве пароля — подойдёт
openssl rand -hex 32. Агенту нужен этот пароль для подкючения; никогда не разглашайте его. Чтобы сменить его, просто выполните команду заново — старый пароль перестанет работать немедленно.
Шаг 5: направьте входящую почту в этот сервис
Направьте все письма, адресованные на ваш домен, в этот сервис (настраивается один раз):
# replace <ZONE_ID> with your domain's Zone ID, and <API_TOKEN> with a Cloudflare API token that has "Email Routing edit" permission
curl -X PUT "https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/email/routing/rules/catch_all" \
-H "Authorization: Bearer <API_TOKEN>" -H "Content-Type: application/json" \
--data '{"enabled":true,"name":"catch-all to worker","matchers":[{"type":"all"}],"actions":[{"type":"worker","value":["cloudflare-email"]}]}'Предпочитаете действовать через дашборд: дашборд Cloudflare → ваш домен → Email Routing → Catch-all → действие «Send to a Worker» → выберите cloudflare-email.
Если для этого домена Email Routing ещё никогда не включался, сначала включите его в дашборде (он автоматически добавит DNS-записи, необхдимые для доставки почты).
Готово! Теперь почта, отправленная на anythhing@your-domain, перехватывается, а сервис доступен по адресу https://your-subdomain. Чтобы проверить: отправьте тестовое письмо на test@your-domain — в течение нескольких секунд npx wranler tail cloudflare-email должен показать его обработку; агент сможет найти его после того, как вы выполните настройку из раздела «Использование» ниже.
Необязательно: включите отправку
Пропустите этот шаг — и сервис сможет только получать почту, но не отправлять её. Поддерживаются два бэкенда, и по умолчанию используется Resend:
Вариант первый, Resend (рекомендуется):
Зарегисрируйтесь на Resend и добавьте свой домен — используйте корневой домен (
yourdomain.com) напрямую, поддомен не нужен.Добавьте три DNS-записи, которые он выдаст, в DNS Cloudflare:
Тип | Имя | Значение | Прокси |
MX |
| адрес, который выдаст Resend, приоритет 10 | — |
TXT |
|
| — |
TXT |
| откртый ключ DKIM, который выдаст Resend | Только DNS (серое облако) |
Эта MX-запись находится на
send.yourdomain.com, поэтому не конфликтует с Email Routing на корневом домене. Запись DKIM должна быть без прокси — если оставить её за прокси, проврка не пройдёт.
Установите ключ как секрет:
npx wranler secret put RESEND_API_KEY -c wranler.local.jsonc
Бесплатный тариф — 3 000 писем/месяц, 100/день — этого достаточо для старта; платите по мере роста или переключитесь на вариант ниже.
Вариант второй, встроенная отправка Cloudflare: убедитесь, что в wrangler.local.jsonc есть "send_emails": [{ "name": "EMAL" }] (в шаблоне уж ест), затем один раз пройдите онбординг Email Sending для вашего домена в Email-дашборде Cloudflare. Если вы отправляете письма только на адреса, уже подтверждённые в Email Routing → Destination addresses, можно полностью пропустить онбординг и сразу отправлять бесплатно.
Если ни один из них не настроен, при отправке возвращается сообщение «no send backend available», в котором объясняется, что нужно настроить; приём и поиск писем не затрагиваются. Подробности об отправке — лимиты размера вложений, ограничения для отправителя, как отлаживать сбой — см. в ARCHITECTURE.md и cli/READEME.md; при сбое отправки агент читает код ошибки и сообщает вам, что пошло не так, так что заранее заоминать эти лимиты не нужно.
Постоянное обслуживание после развертывания
npx wrangler tail cloudflare-email # tail incoming mail and errors live
npx wrangler secret put MCP_TOKEN # rotate the access password
npx wrangler d1 execute email_db --remote --command "SELECT id,subject,from_addr,date FROM emails ORDER BY date DESC LIMIT 10"
wrangler.local.jsoncсуществует только на вашей машине — не удалите его случайно. Если удалите, повторите «Шаг 0» и заново впишите ID базы данных и домен.
Использвание: дайте агенту возможность отправлять и получать почту
После развертывания есть три способа подключить его к агенту. Навыки (Skills) — рекомендуемый путь — меньше всего хлопот и ближе всего к цели «агент сам управляет почтой».
Предпочтительно: используйте навыки (рекомендуется)
В каталоге skills/ есть два навыка, которые учат агента работать через инструмент командной строки cfmail:
skills/
email-inbox/ for a regular user: read and send mail with a bound Key
email-admin/ for an admin: open mailboxes, issue/revoke Keys, configure new-mail alertsОни работают вместе: администратор с помощью email-admin выпускает ключ для адреса почтового ящика, а пользователь вставляет этот ключ в email-inbox, чтобы отправлять и получать почту.
Шаг 0, установйте cfmail (требуется Node 20 или новее):
npm install -g cfmailШаг 1, скоируйте навыки в каталог навыков агента. Для Claude Code это .claude/skills/:
cp -r skills/email-inbox your-project/.claude/skills/
cp -r skills/email-admin your-project/.claude/skills/Можно также создать симлинк на весь каталог
skills/:ln -s /path/to/cfmail/skills your-project/.claude/skills.
Шаг 2 (админistrator), откройте почтовый ящик:
cfmail admin setup --base https://your-subdomain --key <admin-MCP_TOKEN> # one-time
cfmail admin create-key alice@your-domain # prints a plaintext Key, shown only onceДругие команды админistrator: list-keys (посмотреть, что было выпущено), delete-key <address> (отозвать), webhook --set whk_xxx (присылать новые письма в чат, необязательно — см. cli/READEME.md).
Шаг 3 (пользватель), настройте этот ключ:
cfmail setup --base https://your-subdomain --email alice@your-domain --key <the-key-from-step-2>После настройки просто общайтесь с агентом:
«Проверь, есть ли новые письма» / «Найди то письмо с кодом подтверждения»
«Ответь на то письмо со счётом и подтверди, что мы его получили»
«Перешли то вложение в бухгалтерию»
Он сам выбират нужную команду, читат полный текст, загружает вложения и отвечает по мере необходимос и. Письма всегда отправляются с адреса, привязанного к ключу, — это обеспечивается на стороне сервера и не может быть измнено.
Если вы также хотите синхронизировать почту на локальный диск и получать в чат кликабельную ссылку на файл при появлении нового письма — это отдельный необязательный дополнительный модуль, не входящий в процесс работы с навыками:
cfmail sync --dir ~/cfmail --notify whk_your-keyЗапускайте его по расписанию через launchd/cron. Структура каталогов, правила дедупликации и отличия от admin webhook описаны в cli/READEME.md.
Замечание по безопасности:
email-adminсодержит админistrative ключ с наивысшими привилегиями — хранite его только на машине админistrator, никогда не передавайте обычному пользвателю.
Альтернатива: используйте напрямую командную строку cfmail
Без навыков агент (или вы) может просто выполнять команды:
cfmail unread # fetch the latest unread mail
cfmail search "invoice" # full-text search, Chinese included
cfmail read <email-id> # read the full text and attachment list
cfmail send --to a@x.com --subject "subject" --text "body" # send one
cfmail reply <email-id> --text "reply text" # reply within the original thread
cfmail config # see which mailbox this config points atУправление несколькими почтовыми ящиками на одной машине, параллельный запуск нескольких агентов, структура локального архива и все флаги — полный справочник в cli/README.md (каждая команда также отвечает на --help).
Альтернатива: без CLI, подключите сервис как MCP напрямую
Если вы не хотите устанавливать CLI, можно направить MCP-совместимый ИИ-клиент прямо на сервис:
claude mcp add --transport http email https://your-subdomain/mcp \
--header "Authorization: Bearer your-password"Другие MCP-клиенты используют файл конфигурации:
{
"mcpServers": {
"email": {
"url": "https://your-subdomain/mcp",
"headers": { "Authorization": "Bearer your-password" }
}
}
}После подключения просто спрашивайте обычным языком: «найди письма, содержащие "счёт"», «открой первое и загрузи вложение» — под капотом используются инструменты вроде search_emails / list_emails / get_email / get_attachment / send_email, которые ИИ выбирает автоматически; запоминать их названия не нужно. Этот путь не даёт локального архивирования или управления несколькими ящиками — эти функции доступны только в cfmail.
Часто задаваемые вопросы
URL сервиса не загружается / соединение сбрасывается: не используйте стандартный
*.workers.dev(в некоторых регионах заблокирован) — используйте свой домен (именно так этот проект работает по умолчанию).Отправленное вами тестовое письмо вернулось (550 SPF): это проблема валидации на стороне отправителя; отправка с обычного почтового ящика (Gmail, QQ, Outlook и т. д.) не затрагивается.
Только что отправленное письмо ещё не появилось: между получением и индексацией проходит несколько секунд — подождите и проверьте ещё раз или используйте
npx wrangler tail cloudflare-email, чтобы увидеть, пришло ли оно.Появляется ошибка 401: проверьте, что
Authorization: Bearer your-passwordзадан правильно.
Для контрибьюторов: локальная разработка
cp .dev.vars.example .dev.vars # fill in a local access password
npm run db:local # create local database tables
npm run dev # start locally on :8787
MCP_TOKEN=your-local-password node scripts/mcp-smoke.mjs # smoke-test the local API
npm test # unit tests
npm run typecheck # type checkingСмоук-тест на продакшене: BASE="https://your-subdomain" TOKEN="your-password" node scripts/remote-check.mjs
Лицензия
MIT — можно свободно использовать, изменять и распространять.
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
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to send emails via Cloudflare's Email Service. Provides both MCP server integration for AI tools and a REST API for traditional applications with support for HTML content, attachments, and secure authentication.2MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that connects Gmail to AI assistants, enabling search, read, send, reply-all, forward, attachment handling, and draft management across multiple Google accounts, deployable on your own Cloudflare Worker.231MIT
- AlicenseNot gradedqualityCmaintenanceConnects 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
- AlicenseNot gradedqualityCmaintenanceDeploys a self-hosted Cloudflare email service providing short-lived mailboxes with a JSON API and MCP endpoint for automated testing and AI agent signup, verification, and magic-link flows.9MIT
Related MCP Connectors
Hosted email MCP for AI agents with inboxes, send/receive, memory, recovery, and credits.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Authenticated email gateway for AI agents — per-agent inboxes, HITL approval, SPF/DKIM verified.
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/askie/cfmail'
If you have feedback or need assistance with the MCP directory API, please join our Discord server