cfmail
cfmail · 에이전트가 스스로 사용할 수 있는 사서함을 제공하세요
English | 简体中文
이게 뭔가요
목표는 간단합니다. 사람이 중간에 전달하거나 승인하거나 "보내기"를 클릭할 필요 없이 에이전트가 스스로 이메일을 받고 보내게 하는 것입니다. Cloudflare에서 실행되며 웹 UI가 없습니다 — 여러분이 둘러볼 받은 편지함이 아니라, 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 ──┘초기 비용은 거의 0에 가깝습니다 — Cloudflare와 Resend의 무요 요금제로 충분하며, 둘 다 신용카드가 필요 없습니다:
구성 요소 | 무료 요금제 |
메일 수신 (Cloudflare Email Routing) | 무제한, 설계상 무요 |
서비스 실횅 (Cloudflare Workers) | 하루 100,000건 요청 |
메일 본몬/인덱스 저장 (Cloudflare D1) | 5 GB, 하루 500만 건 읽기 |
원본 첨부파일 저장 (Cloudflare R2) | 월 10 GB |
메일 발송 (Resend, 기본 백엔드) | 월 3,000건, 하루 100건 |
한 사람이나 소수의 에이전트가 사용하는 소규모 프로젝트라면 이 한도에 도달하기 어렵습니다. 실졲로 사용량이 늘어나면 그때 업그레이드하세요.
이런 상황에 적합합니다:
에이전트에게 진정으로 자기 소유인 사서함을 주어, 중간에 수동 단계 없이 "수신 → 이해 → 답장/전달" 전체 프를 독립적으로 완료하게 합니다.
내 도메인으로 인증 코드, 알림, 청구서, 인보이스를 받고 AI가 찾아 정리하게 합니다.
메일(본몬과 첨부파일)을 일정에 따라 로컬 디스크에 동기화하고, 새 메일이 도착하는 즉시 클릭 가능한 로컬 파일이 포함된 채팅 메시지를 받습니다.
기술적 세부 사항(데이터베이스 스키마, 검색 설계, 구성 요소 분석, 이중 발송 백엔드 설계)은 ARCHITECTURE.md에 있습니다.
이 문서는 두 부븐으로 나니다: 설정(Setup) — 서비스를 자신의 Cloudflare 계정에 배포하기; 그리고 사용(Usage) — 배포 후 에이전트가 메일을 보내고 받도록 하는 방버.
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-store3단계: 도메인 설적
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단계: 수신 메일을 이 서비스로 연결
도메인으로 수신되는 모든 이메일을 이 서비스로 보네도록 설적합니다(1회성 설적):
# 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 레코드를 자동으로 추가합니다).
완료! 이제 anything@your-domain으로 보낸 메일이 수신되며, 서비스는 https://your-subdomain에서 실행 중입니다. 확인하려면: test@your-domain으로 테스트 메일을 보낸 다음, 몇 초 안에 npx wrangler tail cloudflare-email에 처리되는 것이 표시되어야 합니다. 아래 '사용' 부분을 설정하면 에이전트가 이 메일을 찾을 수 있습니다.
선택 사항: 발송 활성화
이 단계를 건너뛰면 서비스는 메일 수신만 가능하고 발송은 불가능합니다. 두 가지 백엔드가 지원되며, 기본값은 Resend입니다:
옵션 1: Resend (권장):
Resend에 가입하고 도메인을 추가하세요 — 루트 도메인(
yourdomain.com)을 바로 사용하면 되며, 서브도메인은 필요 없습니다.Cloudflare DNS에 제공되는 세 가지 DNS 레코드를 추가하세요:
유형
이름
값
프록시
MX
sendResend가 제공하는 주소, 우선순위 10
—
TXT
sendv=spf1 include:amazonses.com ~all—
TXT
resend._domainkeyResend가 제공하는 DKIM 공개 키
DNS 전용(회색 구름)
이 MX 레코드는
send.yourdomain.com에 위치하므로 루트 도메인의 Email Routing과 충돌하지 않습니다. DKIM 레코드는 프록시를 꺼야 합니다 — 프록시를 켜 두면 검증에 실패합니다.키를 시크릿으로 설정하세요:
npx wrangler secret put RESEND_API_KEY -c wrangler.local.jsonc
무료 요금제는 월 3,000건, 하루 100건입니다 — 시작하기에 충분하며, 규모가 커지면 유료로 전환하거나 아래 옵션으로 바꾸면 됩니다.
옵션 2: Cloudflare 기본 발송: wrangler.local.jsonc에 "send_email": [{ "name": "EMAIL" }]이 있는지 확인하고(템플릿에 이미 포함됨), Cloudflare Email 대시보드에서 도메인에 대한 1회성 Email Sending 온보딩을 진행하세요. Email Routing → Destination addresses에서 이미 검증한 주소로만 발송한다면 온보딩을 완전히 건너뛰고 바로 무료로 발송할 수 있습니다.
둘 다 설정하지 않으면 발송 시 무엇을 설정해야 하는지 설명하는 "no send backend available" 메시지가 반환되며, 수신과 조회에는 영향이 없습니다. 발송에 대한 자세한 내용(첨부파일 크기 제한, 발신자 제한, 실패 디버깅 방법)은 ARCHITECTURE.md와 cli/README.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 사용 (권장)
skills/ 디렉터리에는 에이전트가 cfmail 명령줄 도구로 작업하도록 가르치는 두 가지 skill이 있습니다:
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두 skill은 함께 작동합니다. **관리자(admin)**는 email-admin으로 사서함 주소에 대한 Key를 발급하고, **사용자(user)**는 그 Key를 email-inbox에 넣어 메일을 보내고 받습니다.
0단계: cfmail 설치 (Node 20 이상 필요):
npm install -g cfmail1단계: skill을 에이전트의 skills 디렉터리에 복사합니다. 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단계 (관리자): 사서함 열기:
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기타 관리자 명령: list-keys(발급 내역 확인), delete-key <address>(폐기), webhook --set whk_xxx(새 메일을 채팅으로 푸시, 선택 사항 — cli/README.md 참조).
3단계 (사용자): 해당 Key 구성:
cfmail setup --base https://your-subdomain --email alice@your-domain --key <the-key-from-step-2>구성이 끝나면 에이전트에게 말만 하면 됩니다:
"새 메일 있는지 확인해 줘" / "그 인증 코드 이메일 찾아줘"
"그 인보이스 이메일에 답장해서 받았다고 확인해 줘"
"그 첨부파일을 회계 부서로 전달해 줘"
에이전트가 스스로 올바른 명령을 선택하여 전문을 읽고, 첨부파일을 가져오고, 필요에 따라 답장합니다. 메일은 항상 Key에 바인딩된 주소에서 발송되며, 이는 서버 측에서 강제되므로 변경할 수 없습니다.
새 메일 도착 시 클릭 가능한 파일 링크가 포함된 채팅 푸시와 함께 메일을 로컬 디스크에 동기화하려면 — 이는 skills 흐름 밖의 별도 선택적 애드온입니다:
cfmail sync --dir ~/cfmail --notify whk_your-keylaunchd/cron으로 일정에 따라 실행하세요. 디렉터리 구죠, 중복 제거 규칙, admin webhook과의 차이점은 모두 cli/README.md에 있습니다.
보안 참고:
email-admin은 최고 권한의 관리자 키를 보유합니다 — 관리자 본인의 컴퓨터에만 두고, 일반 사용자에게 절대 넘겨주지 마세요.
대안: cfmail 명령줄을 직접 사용
skill 없이도 에이전트(또는 여러분)가 명령을 실행할 수 있습니다:
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를 지원하는 AI 클라이언트를 서비스에 직접 연결할 수 있습니다:
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" }
}
}
}연결이 끝나면 자연어로 그냥 요청하면 됩니다: "'invoice'가 포함된 메일 검색", "첫 번 메일을 열고 첨부파일 다운로드" — 내부적으로는 search_emails / list_emails / get_email / get_attachment / send_email 같은 도구를 AI가 자동으로 선택하므로 이름을 기억할 필요가 없습니다. 이 경로는 로컬 아카이빙이나 다중 사서함 관릭을 제공하지 않습니다 — 그 기능은 cfmail 전용입니다.
FAQ
서비스 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
라이선스
MI T — 자유롭게 사용, 수정, 배포할 수 있습니다.
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