K-Mail-MCP
Provides tools for reading, summarizing, translating, and managing Gmail emails, including spam detection and unified inbox management.
Provides tools for reading, summarizing, translating, and managing iCloud emails, including spam detection and unified inbox management.
Provides tools for reading, summarizing, translating, and managing Kakao/Daum emails, including spam detection and unified inbox management.
Provides tools for reading, summarizing, translating, and managing Naver emails, including spam detection and unified inbox management.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@K-Mail-MCPSummarize my unread emails from all accounts."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
K-Mail-MCP
Korean Mail MCP Server — 네이버·다음·Gmail·네이트·Yahoo·iCloud를 Claude AI에 연결하는 MCP 플러그인
English summary: K-Mail-MCP is an MCP (Model Context Protocol) server that connects 6 mail services — Naver, Daum/Kakao, Gmail, Nate, Yahoo, and iCloud — to Claude AI. It enables AI-powered email summarization, translation, spam detection, and unified inbox management — all with AES-256-GCM encrypted credentials.
왜 만들었나요?
Gmail은 공식 MCP가 있지만, 한국에서 주로 사용하는 네이버·다음 메일은 아무것도 없었습니다. 메일을 확인하기 위해 여러 메일 서비스에 일일이 로그인하는 건 번거로운 일이라, 한 번에 요약하고 볼 수 있도록 Claude AI와 함께 만들었습니다.
→ 자세한 이야기는 PHILOSOPHY.md를 읽어주세요.
Related MCP server: io.github.p-w-4-z/inbox-mcp
어떻게 사용하나요? — 먼저 이것만 결정하세요
아래 질문 하나에 답하면 필요한 설치 경로가 정해집니다.
"Claude Desktop 앱에서만 쓸 건가요?" → A. 로컬 설치 (가장 쉬움)
"claude.ai 웹/모바일에서도 쓸 건가요?" → B. 원격 서버 설치 (고급)A. 로컬 설치 (Claude Desktop) | B. 원격 서버 (claude.ai 웹/앱) | |
난이도 | ⭐ 쉬움 (5분) | ⭐⭐⭐ 어려움 (서버 필요) |
필요한 것 | PC + Claude Desktop | 외부 접근 가능한 서버 |
인증 | 없음 (로컬 프로세스) | OAuth 2.0 로그인 |
시작 |
A. 로컬 설치 (Claude Desktop) — 5분
1단계: 사전 요구사항 확인
Node.js v20 이상 설치 확인: 터미널에서
node --version실행v20.x.x이상이면 통과. 아니면 nodejs.org에서 LTS 버전 설치
Claude Desktop 설치: claude.ai/download
2단계: 다운로드 및 설치
git clone https://github.com/youngsooco/k-mail-mcp.git
cd k-mail-mcp또는 Releases에서 ZIP 다운로드 후 압축 해제.
Windows:
install.bat 파일을 더블클릭macOS/Linux:
chmod +x install.sh && ./install.sh설치 스크립트가 자동으로 패키지 설치 + Claude Desktop 설정 파일 연결까지 완료합니다.
3단계: 메일 계정 등록
⚠️ 앱 비밀번호가 필요합니다 — 로그인 비밀번호와 다릅니다. 서비스별 발급 방법 섹션을 먼저 확인하세요.
Windows:
setup.bat 파일을 더블클릭macOS/Linux:
chmod +x setup.sh && ./setup.sh대화형 메뉴가 열립니다:
============================================
한국 메일 MCP - 계정 설정
============================================
1) 계정 추가 / 수정
2) 계정 목록
3) 계정 삭제
4) AI 스팸 필터 설정 (Claude Haiku API 키) (미등록)
5) 종료1을 선택 → 서비스·이메일·앱 비밀번호·별칭 입력. 입력값은 AES-256-GCM으로 암호화되어 저장됩니다.
4단계: Claude Desktop 재시작
Claude Desktop을 트레이에서 완전히 종료 후 다시 실행. 좌측 도구 메뉴에서 k-mail-mcp가 보이면 완료입니다.
이제 Claude에서 말을 걸어보세요:
"새 메일 확인해줘"
"오늘 받은 메일 요약해줘"
"영문 메일 번역해줘"서비스별 앱 비밀번호 발급 방법
앱 비밀번호 = IMAP 전용 별도 비밀번호. 로그인 비밀번호로는 연결이 거부됩니다.
네이버 메일
네이버 보안설정 접속
2단계 인증→ 활성화 (미활성 시 앱 비밀번호 발급 불가)애플리케이션 비밀번호→추가→ 이름 입력 (예: Claude) → 발급생성된 비밀번호 복사 ← 창 닫으면 다시 볼 수 없음
네이버 메일 → 환경설정 →
IMAP/SMTP 설정→ 사용함 체크setup.bat실행 → 네이버 계정 등록 시 복사한 비밀번호 입력
다음/카카오 메일
다음 메일 → 설정 →
IMAP/POP3탭IMAP 사용 → 사용함 선택
[비밀번호 확인하기]클릭 → 카카오 인증 → 표시된 비밀번호 복사setup.bat실행 → 다음 계정 등록 시 복사한 비밀번호 입력
다음은 별도 발급이 아니라, 위 화면에서 이미 생성된 전용 비밀번호를 확인하는 방식입니다.
Gmail
Google 계정 →
보안탭2단계 인증활성화 (미활성 시 앱 비밀번호 발급 불가)검색창에
앱 비밀번호검색 → 클릭앱 이름 입력 (예: Claude) →
만들기생성된 16자리 비밀번호 복사 ← 창 닫으면 다시 볼 수 없음
setup.bat실행 → Gmail 계정 등록 시 복사한 비밀번호 입력
네이트
네이트 메일 → 설정 → 외부 메일 앱 연결
IMAP 사용 → 활성화
2단계 인증 미사용 시 로그인 비밀번호 그대로 사용 가능
2단계 인증 사용 중이면 보안 설정에서 앱 비밀번호 발급
⚠️ 미검증 서비스: 충분히 테스트되지 않았습니다.
Yahoo
Yahoo 계정 보안 접속
앱 비밀번호 생성→ 앱 이름 입력 → 16자리 비밀번호 복사setup.bat실행 → Yahoo 계정 등록 시 복사한 비밀번호 입력
⚠️ 미검증 서비스: 충분히 테스트되지 않았습니다.
iCloud
Apple ID →
로그인 및 보안앱 전용 암호→암호 생성→ 이름 입력 → 비밀번호 복사setup.bat실행 → iCloud 계정 등록 시 복사한 비밀번호 입력
iCloud는 2단계 인증이 항상 켜져 있어 앱 전용 암호가 필수입니다. ⚠️ 미검증 서비스: 충분히 테스트되지 않았습니다.
B. 원격 서버 설치 (claude.ai 웹/앱)
이 섹션은 claude.ai 웹 또는 모바일 앱에서 직접 K-Mail-MCP를 사용하고 싶을 때만 필요합니다. Claude Desktop만 사용한다면 위의 A 섹션만으로 충분합니다.
작동 방식
claude.ai (Anthropic 클라우드)
↓ 자동 탐색: GET /.well-known/oauth-authorization-server
↓ 자동 등록: POST /register
↓ 사용자 브라우저: GET /authorize → API 키 입력 페이지
↓ 인증 완료: POST /token → access token 발급
↓ MCP 연결: POST /mcp + Bearer token
내 서버 (공인 IP 또는 Tunnel)사전 요구사항
외부에서 접근 가능한 서버 (공인 IP, Cloudflare Tunnel, Tailscale Funnel 등)
Node.js v20+
MCP_API_KEY환경변수 (이 값이 OAuth 로그인 비밀번호)
서버 시작
export MAIL_MCP_HTTP_PORT=8766
export MCP_API_KEY="원하는-비밀키" # 로그인 시 입력할 값
export MAIL_MCP_BASE_URL="https://your-domain.com" # 외부 접근 가능한 URL (/ 없이)
node index.js정상 시작 로그:
[k-mail-mcp] v1.4.5 OAuth2 MCP 서버 시작 — port 8766
issuer: https://your-domain.com
MCP: https://your-domain.com/mcp
metadata: https://your-domain.com/.well-known/oauth-authorization-serverCloudflare Tunnel로 외부 노출 (고정 IP 없을 때)
# cloudflared 설치: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/
# 임시 터널 (URL 매번 변경)
cloudflared tunnel --url http://localhost:8766
# 출력된 URL을 MAIL_MCP_BASE_URL에 사용CF Tunnel 무료 플랜은 커스텀 도메인 없이도 사용 가능합니다. 단, 랜덤 URL이 재시작마다 변경됩니다. 고정 URL이 필요하면 Cloudflare 계정 연결 후 커스텀 도메인을 설정하세요.
claude.ai에서 연결하기
claude.ai → 설정(Settings) → 연결(Connections)
MCP 서버 추가(Add MCP Server) 클릭
입력:
항목 | 값 |
이름 |
|
URL |
|
OAuth 클라이언트 ID | 비워두기 (자동 등록) |
OAuth 클라이언트 시크릿 | 비워두기 (PKCE 전용) |
저장 → 연결 클릭
브라우저에 로그인 페이지 표시 →
MCP_API_KEY값 입력 → 연결 허용완료 — claude.ai에서 k-mail-mcp 툴 사용 가능
토큰 유효 기간
액세스 토큰: 30일 (재로그인 불필요)
서버 재시작 시 모든 토큰 초기화 → 재로그인 필요
만료 시 claude.ai가 자동으로 재인증 페이지 표시
주요 기능
멀티 계정 통합 — 네이버, 다음/카카오, Gmail 계정을 하나의 MCP로 연결
전체 폴더 순회 — INBOX뿐 아니라 모든 IMAP 폴더를 자동 발견하여 순회
증분 수집 — 마지막 확인 이후 읽지 않은 메일만 가져옴
AI 자동 분류 — 맞춤형 카테고리로 자동 분류 (
categories.json으로 커스터마이징)카테고리 자동 생성 — 실제 메일 패턴을 AI가 분석해 나만의 카테고리 규칙 생성
영문 메일 번역 — 영문 메일 자동 감지 후 Claude가 한국어로 번역·요약
메일 링크 — Gmail은 해당 메일 딥링크, 네이버·다음은 받은편지함 링크 제공
완전 암호화 — 이메일 주소 + 비밀번호 + API 키 모두 AES-256-GCM 암호화 저장
인스턴스 격리 — 설치본마다 고유 키 생성, 다른 PC와 데이터 공유 불가
OAuth 2.0 원격 접속 — claude.ai custom connector로 원격 연결 (v1.4.0+)
사용 방법
Claude에서 자연어로 말하면 됩니다:
"새 메일 확인해줘"
"오늘 받은 메일 카테고리별로 정리해줘"
"영문 메일만 번역해서 요약해줘"
"다음 계정에서 읽지 않은 메일 보여줘"
"AI 관련 메일만 찾아줘"
"저번에 확인한 이후로 새 메일 있어?"
"내 메일 패턴 보고 카테고리 자동으로 만들어줘"
"어떤 폴더들을 스캔하고 있어?"
"카페편지함은 스캔에서 빼줘"MCP Tool 목록
Tool | 설명 |
| 읽지 않은 메일 수집, 전체 폴더 순회, 4단계 스팸 탐지 포함 |
| 등록된 계정 목록 및 폴더 스캔 현황 확인 |
| 특정 메일 전체 본문 읽기 ( |
| 마지막 실행 시각 초기화 (계정별 / 날짜 지정 가능) |
| IMAP 폴더 목록 및 발견/제외/유효 현황 확인 |
| 메일 패턴 AI 분석 → 맞춤 카테고리 자동 생성 |
| 계정별 폴더 발견/제외/유효 스캔 현황 조회 |
| 스캔 제외 폴더 관리 (추가 / 제거 / 초기화) |
지원 메일 서비스
서비스 | 이메일 도메인 | IMAP 주소 | 검증 상태 |
네이버 | @naver.com | imap.naver.com | ✅ 검증완료 |
다음/카카오 | @daum.net @kakao.com | imap.daum.net | ✅ 검증완료 |
Gmail | @gmail.com | imap.gmail.com | ✅ 검증완료 |
네이트 | @nate.com | imap.nate.com | ⚠️ 미검증 |
Yahoo | @yahoo.com | imap.mail.yahoo.com | ⚠️ 미검증 |
iCloud | @icloud.com @me.com | imap.mail.me.com | ⚠️ 미검증 |
⚠️ 미검증 서비스 사용자 분들께: 동작 여부(성공·실패·오류 메시지)를 GitHub Issues에 알려주시면 빠르게 반영하겠습니다.
지원하지 않는 서비스
서비스 | 이유 |
Outlook.com / Microsoft 365 | OAuth 2.0 인증 필수 (앱 비밀번호 방식 차단) |
네이버 웍스 | B2B 전용, IMAP 설정 비공개 |
카카오 엔터프라이즈 | 기업 계약 필요 |
사내 메일 | IMAP 활성화 여부 회사 정책에 따라 다름 |
IMAP 설정을 아는 경우
index.js의PRESETS객체에 직접 추가 가능합니다. CONTRIBUTING.md 참고
지원 플랫폼
플랫폼 | 지원 여부 | 비고 |
Windows 10/11 | ✅ | 권장 환경, 설치 스크립트 검증완료 |
macOS | ✅ | Node.js 설치 필요, install.sh 미검증 |
Linux | ✅ | install.sh 미검증 |
iOS / Android | ❌ | Claude 앱 MCP 미지원 |
⚠️ macOS / Linux 사용자 분들께:
install.sh/setup.sh는 충분히 검증되지 않았습니다. 동작 여부를 GitHub Issues에 알려주시면 빠르게 반영하겠습니다.
카테고리 커스터마이징
방법 1: AI 자동 생성 (권장)
Claude: "내 메일 패턴 보고 카테고리 자동으로 만들어줘"
→ generate_categories 툴 실행
→ 미리보기 확인 후 "저장해줘" 요청방법 2: 직접 편집
categories.json 파일을 수정하면 됩니다 (Claude Desktop 재시작 불필요):
[
{
"name": "🏥 의료/헬스케어",
"keywords": ["병원", "처방", "진료", "약국", "건강검진", "clinic", "hospital"]
},
{
"name": "📚 교육/학습",
"keywords": ["강의", "수강", "coursera", "udemy", "인프런", "수료"]
}
]name: 이모지 + 카테고리명keywords: from(발신자) + subject(제목)에서 검색할 키워드 (대소문자 무시)newsletterOnly:true이면 List-Unsubscribe 헤더 있는 메일에만 적용categories.json없거나 비어있으면 기본 9개 카테고리 자동 사용
스팸 탐지 — 4단계 필터링
단계 | 방법 | 필요 조건 |
1️⃣ | 키워드 패턴 매칭 | 없음 (기본 동작) |
2️⃣ | Spamhaus DNSBL | 없음 (DNS 쿼리) |
3️⃣ | SPF / DKIM / DMARC | 없음 (헤더 파싱) |
4️⃣ | Claude Haiku AI 판단 | Anthropic API 키 (선택) |
1~3단계는 별도 설정 없이 자동 동작. 4단계는 setup.bat → 4번 메뉴로 API 키 등록 시 활성화.
spamScore = 패턴점수 + DNSBL점수 + 인증점수(SPF/DKIM/DMARC) ± AI조정
isSpam = spamScore >= 70데이터 흐름 및 보안
사용자 입력 (setup.bat / setup.sh)
├─ 이메일 주소 + 앱 비밀번호
│ ↓ AES-256-GCM 암호화
│ accounts.enc.json
│
└─ Anthropic API 키 (선택)
↓ AES-256-GCM 암호화
settings.enc.json
.master.key ← 이 설치본 전용 256-bit 키 (자동 생성)
↓
MCP 서버 실행 시 → 메모리에서만 복호화 → IMAP 연결 / Haiku API 호출
↓
서버 종료 → 평문 완전 소멸비밀번호·API 키는 파일에 절대 평문으로 저장되지 않습니다
.master.key는 이 PC에만 존재합니다Claude (Anthropic) 서버로 비밀번호가 전송되지 않습니다
OAuth 2.0 보안 설계 (v1.4.0+)
항목 | 구현 |
PKCE (S256) | 필수 — 인가 코드 탈취 공격 방어 |
API 키 비교 |
|
Open Redirect 방어 | 폼 제출 시 |
auth code TTL | 5분 |
access token TTL | 30일 (서버 재시작 시 초기화) |
토큰 저장 | 서버 인메모리 — 파일·DB 미기록 |
동적 클라이언트 등록 | RFC 7591 지원 — 사전 등록 불필요 |
HTML 인젝션 방어 | 로그인 페이지 |
보안 패치 이력
버전 | 내용 |
v1.2.1 | 프롬프트 인젝션 방어, TLS 강제( |
v1.3.0 | GitHub Actions 워크플로우 hardening |
v1.4.0 | OAuth 2.0, |
v1.4.5 | Stateless transport (CAI 로드밸런싱 대응), express trust proxy 설정 |
자주 묻는 질문
Claude Desktop (로컬 모드)
Q. setup.bat을 실행했는데 아무것도 안 뜹니다.
A. node --version으로 Node.js 버전 확인. v20 미만이면 nodejs.org에서 LTS 설치 후 install.bat 먼저 실행.
Q. Claude Desktop에서 k-mail-mcp가 보이지 않습니다.
A. install.bat 재실행 → Claude Desktop 트레이에서 완전 종료 → 재시작.
Q. Claude Desktop 업데이트 후 MCP가 사라졌습니다.
A. install.bat을 다시 실행하세요.
Q. claude_desktop_config.json 파일이 어디 있나요?
A. Windows 탐색기 주소창에 %APPDATA%\Claude 입력.
Q. 네이버 IMAP 연결 오류가 납니다. A. ① 2단계 인증 활성화 ② 앱 비밀번호 재발급 ③ 네이버 메일 → IMAP/SMTP 설정 → 사용 켜기
Q. 다음 메일 연결이 안 됩니다. A. 다음 메일 웹 → 환경설정 → 외부 메일 앱 연결 → IMAP 사용 켜기.
claude.ai 원격 MCP (OAuth 모드)
Q. "MCP 서버를 찾을 수 없습니다" 오류가 납니다.
A. 브라우저에서 https://your-domain.com/.well-known/oauth-authorization-server를 직접 열어 JSON이 반환되는지 확인.
Q. OAuth 클라이언트 ID / 시크릿에 뭘 입력해야 하나요? A. 비워두세요. 동적 클라이언트 등록(RFC 7591)으로 자동 처리됩니다.
Q. 서버 재시작 후 다시 로그인하라고 합니다. A. 정상입니다. 토큰이 인메모리에만 저장되므로 재시작 시 초기화됩니다.
Q. API 키는 무엇인가요?
A. MCP_API_KEY 환경변수로 설정한 값입니다. OAuth 로그인 페이지에서 이 값을 입력합니다.
공통
Q. .master.key를 실수로 삭제했습니다.
A. 복구 불가. accounts.enc.json, .instance.json 삭제 후 setup.bat으로 계정 재등록.
Q. 여러 PC에서 같은 계정을 쓰고 싶습니다.
A. 각 PC에서 독립적으로 setup.bat 실행. .master.key는 복사하지 마세요.
Q. iOS/Android에서 사용할 수 있나요? A. 현재 Claude 앱은 MCP를 지원하지 않아 불가합니다.
Q. 다른 메일 서비스를 추가할 수 있나요?
A. IMAP을 지원하는 모든 서비스는 index.js의 PRESETS 객체에 추가 가능. CONTRIBUTING.md 참고.
Q. watched_mailboxes.json이 git에 올라갑니다.
A. v1.3.0부터 .gitignore에 자동 포함. 이미 올라간 경우: git rm --cached watched_mailboxes.json.
파일 구조
k-mail-mcp/
├── index.js MCP 서버 본체 — stdio / HTTP+OAuth2 듀얼 모드
├── oauth.js OAuth 2.0 Provider
├── categories.json 카테고리 규칙 (사용자 정의 가능)
├── install.bat Windows 설치 (더블클릭)
├── install.ps1 설치 로직 (PowerShell)
├── install.sh macOS/Linux 설치
├── setup.bat Windows 계정·설정 관리 (더블클릭)
├── setup.ps1 계정·설정 관리 UI (PowerShell)
├── setup.sh macOS/Linux 계정·설정 관리
├── setup-worker.js 암호화/저장 코어
├── package.json
├── INSTALL_GUIDE.md 플랫폼별 상세 설치 가이드
├── CONTRIBUTING.md
├── PHILOSOPHY.md
└── ROADMAP.md자동 생성 파일 (공유 금지):
accounts.enc.json 계정 정보 (AES-256-GCM 암호화)
settings.enc.json API 키 등 설정 (AES-256-GCM 암호화)
.master.key 256-bit 암호화 키 (절대 공유·백업 금지)
.instance.json 인스턴스 식별자
last_run.json 마지막 실행 시각
watched_mailboxes.json 폴더 발견 캐시 (이 PC 전용)AI와 함께 만들고 유지합니다
이 프로젝트는 Claude AI (Anthropic)와 함께 설계·개발·문서화됐습니다.
역할 | 담당 |
아이디어 / 방향 결정 | dadfkim |
코드 작성 / 구조 설계 | Claude AI + dadfkim |
문서 작성 / 유지보수 | Claude AI + dadfkim |
이슈 자동 응답 | Claude AI (GitHub Actions) |
PR 코드 리뷰 | Claude AI (GitHub Actions) |
릴리즈 노트 자동 생성 | Claude AI (GitHub Actions) |
GitHub에서 이슈를 등록하거나 PR을 올리면 Claude AI가 자동으로 검토·답변합니다. 최종 결정은 항상 사람(메인테이너)이 합니다.
기여자
dadfkim — dadfkim@hanmail.net · GitHub · LinkedIn
Claude Sonnet (Anthropic) — AI 공동 개발자 · 자동화 유지보수
기여를 원하시면 CONTRIBUTING.md를 읽어주세요.
라이선스
MIT License © 2026 dadfkim
Available Tools
8 toolscheck_new_mailsA
[K-Mail-MCP 전용] 등록된 전체 메일 계정에서 마지막 확인 이후 읽지 않은 메일을 수집합니다. v1.3.0: 매 실행마다 IMAP 폴더 변경을 자동 감지합니다. 신규 폴더는 누적 로그(discovered)에 추가됩니다. 100개 초과 시 오래된 것부터 밀어냅니다. 폴더 삭제 시그널(IMAP 목록에서 사라지거나 NONEXISTENT 오류)이 있으면 자동 제거합니다. 메일이 없는 폴더는 제거하지 않습니다. 폴더 제외 관리는 set_watched_mailboxes 툴을 사용하세요. reply_to_differs=true인 메일은 반드시 ⚠️ 표시하세요. 출력 형식: 1) 📋 요약 — 총 N통, 폴더별/카테고리별 건수 2) 🔴 즉시 확인 필요 3) 📧 전체 목록 — [계정/폴더] 발신자 — 제목 | 카테고리 | 한줄요약 | 링크 4) ⚠️ 스팸 의심 (isSpam=true만, 없으면 생략) 5) 🔴 연결 오류 (있을 때만)
| Name | Required | Description | Default |
|---|---|---|---|
| account_label | No | all | |
| override_since | No | ||
| max_per_account | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and delivers extensively: it discloses automatic IMAP folder change detection, new folder logging, the 100-item eviction policy, deletion-signal handling, non-removal of empty folders, required ⚠️ marking for reply_to_differs=true, and the full output structure. This goes well beyond minimal viability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded with the core purpose, followed by behavior and output format. Each section earns its place, though the density and lack of bullet formatting make it slightly harder to scan than ideal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output format is fully described and folder-related behavior is very complete, which is helpful given there is no output schema. However, the three parameters are completely undocumented, so the description is not fully sufficient for an agent to confidently call the tool with non-default arguments.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never explains account_label, override_since, or max_per_account. Even the 100-item mention refers to an internal eviction rule, not to the max_per_account parameter. The agent is left to guess the format and semantics of override_since and the selection behavior of account_label.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb '수집합니다' and a clear resource: unread mails from all registered accounts since the last check. It also clearly scopes the tool to K-Mail-MCP and differentiates it from siblings like read_email by emphasizing the batch collection over registered accounts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs users to set_watched_mailboxes for folder exclusion management, which is a useful alternative-tool pointer. It does not explicitly contrast check_new_mails with read_email or list_accounts, but the batch-collection purpose is clear enough to infer when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_categoriesA
실제 메일 패턴을 분석해 맞춤 카테고리를 자동 생성합니다. overwrite=true로 설정해야 저장됩니다.
| Name | Required | Description | Default |
|---|---|---|---|
| overwrite | No | ||
| sample_size | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It does disclose a key non-obvious behavior: categories are only saved when overwrite=true. However, it does not explain what happens when overwrite is false, whether existing categories are replaced, or other side effects of the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The main purpose is front-loaded, and the critical saving condition immediately follows. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is somewhat thin. It conveys the core purpose and the overwrite requirement, but it omits what sample_size controls, what the output looks like, and the implications of overwrite=false. An agent could invoke it correctly but might misunderstand persistence or return behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaningful context for the overwrite parameter by explaining that it must be true for saving to occur. However, it provides no information about sample_size, leaving that parameter dependent entirely on the schema's default/min/max constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: automatically generating custom categories from analyzing actual email patterns. This distinguishes it from sibling tools focused on listing accounts, checking/reading mail, and managing watched mailboxes, since it is the only category-generation tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives one important usage constraint: overwrite must be true for results to be saved. However, it does not explicitly state when to use this tool versus alternatives, nor does it mention situations where generation might be inappropriate or unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_watched_mailboxesA
계정별 폴더 누적 로그(discovered), 제외(excluded), 유효 스캔(effective) 현황을 조회합니다. discovered: 지금까지 발견된 폴더 누적 목록 (최대 100개) excluded: 스캔 제외 폴더 (시스템 기본 + 사용자 추가) effective: 실제 스캔 대상 = discovered - excluded 미등록 계정은 다음 check_new_mails 시 자동 초기화됩니다.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure. It adds meaningful details: the 100-item cap on discovered folders, the excluded folder source, the effective = discovered − excluded calculation, and automatic initialization for unregistered accounts. It does not explicitly state whether the operation is side-effect free, but the read-oriented wording strongly implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and efficiently structured: purpose first, then each status defined in a scannable format, followed by one important behavioral note. Every sentence earns its place, and no redundancy is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter query tool without annotations or output schema, the description provides enough context to understand what will be returned and how the statuses relate. It could be even stronger by stating the response format explicitly, but the current description is broadly sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no burden for the description to explain inputs. The description instead usefully defines the returned status fields, which serves the agent's understanding of the result.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource (account-specific folder logs) and the verb (조회/query), defining the three statuses. It does not explicitly differentiate from sibling tools, but the focus on discovered/excluded/effective scan status makes the tool's purpose readily identifiable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is used to inspect folder scan status, and it references check_new_mails for initialization behavior. However, it never explicitly states when to prefer this tool over alternatives or what conditions make it the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsB
등록된 메일 계정 목록을 반환합니다. (비밀번호 미포함)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It usefully discloses that passwords are not included, but says nothing else about side effects, permissions, or limits. For a zero-parameter read-only list operation, this is acceptable but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficiently worded sentence with a useful parenthetical qualifier. Every word earns its place and the main action is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter list tool, the description is mostly sufficient, but with no output schema and no annotations it could say a bit more about what an account entry looks like or how this differs from list_mailboxes. Still, the core purpose is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the input schema is effectively complete. The description adds a small but relevant semantic detail that the returned accounts are registered, which is the baseline-4 case for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states that the tool returns the list of registered mail accounts, using a specific verb and resource. However, it does not differentiate from sibling list_mailboxes, so an agent cannot immediately tell which list tool to use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that one should use this tool when a list of registered accounts is needed, but it gives no explicit when-to-use guidance or exclusions. No alternatives or relationships to sibling tools like list_mailboxes are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mailboxesB
IMAP 폴더 목록과 현재 누적 discovered/excluded/effective 현황을 반환합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| account_label | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It does disclose that the tool returns a folder list plus cumulative status, implying a read-only operation. However, it does not clarify whether this contacts the IMAP server, how the status counts are computed, or what the output structure looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant words. It efficiently states both the folder-list output and the additional status information, making it appropriately sized for a tool with only one parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should provide more context about return values and parameter usage. The unexplained terms 'discovered/excluded/effective' and the missing explanation of account_label leave significant gaps for an agent trying to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no descriptions for the single required parameter 'account_label', and the tool description does not mention it at all. The parameter name is somewhat self-explanatory, but the description fails to explicitly state that mailboxes are listed for the given account_label or what acceptable values are.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear resource ('IMAP folder list') and an explicit return verb ('returns'), and it goes beyond the tool name by mentioning the additional cumulative status of discovered/excluded/effective mailboxes. However, the meaning of 'discovered/excluded/effective' is not explained, so the purpose is clear but partially ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus siblings such as list_accounts, get_watched_mailboxes, or check_new_mails. The description does not state any exclusions, prerequisites, or alternative conditions, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_emailA
특정 메일의 전체 본문을 읽습니다. max_chars로 본문 길이를 제한할 수 있습니다 (기본 5000자, -1이면 전체).
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | ||
| mailbox | No | INBOX | |
| max_chars | No | 본문 최대 길이 (기본: 5000 / 전체: -1) | |
| account_label | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the max_chars behavior (default 5000, -1 for full) which is useful. However, it does not explicitly state that the operation is read-only (though the verb implies it), nor does it mention side effects, error behavior, or output format. Given the read-only nature, the risk is low, but more context would help.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient Korean sentence. It front-loads the core purpose and then adds the key parameter behavior. There is no fluff or redundancy, and every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 4 parameters, no annotations, and no output schema, so the description must compensate heavily. It does not explain the required parameters (uid, account_label) or the mailbox default, nor does it describe the return value (email body) or any error cases. An agent would need to infer a lot from parameter names, making this insufficient for a complete call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (only max_chars has a description). The description adds meaning for max_chars by explaining the default and the -1 sentinel, which goes beyond the schema. However, it does not explain uid, mailbox, or account_label, which are left to be inferred from their names. Since coverage is low, the description should compensate more but only partially does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: reading the full body of a specific email. It uses the verb '읽습니다' (reads) with the resource '특정 메일의 전체 본문' (the full body of a specific email). It distinguishes itself from sibling tools, which are all about listing accounts, checking new mails, resetting, categorizing, or watching mailboxes – none overlap with reading an email body.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when one needs to read an email's body, but it does not explicitly state when to use this tool versus alternatives or provide context like prerequisites (e.g., having a uid from list_mailboxes). No exclusions or alternatives are mentioned, so the guidance is only implied, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_last_runC
마지막 실행 시각 초기화 또는 특정 시각으로 설정합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| set_to | No | ISO 8601. 비우면 7일 전 | |
| account_label | No | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose side effects. It states it resets or sets a time, but does not explain the consequences, such as affecting future email checks, whether the operation is reversible, or if it only applies to a specific account. This is a significant gap for a state-changing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler. It front-loads the purpose but omits critical context. It is appropriately sized for a simple tool, though it could be more informative without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two parameters and no output schema, the description is incomplete. It does not clarify what 'last run' means, the effect of account_label, or the default behavior when set_to is empty (which is only in the schema). Given the tool's role among siblings, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes set_to (ISO 8601, empty means 7 days ago) but account_label has no schema description. The tool description mentions neither parameter, adding no meaning beyond the schema. With 50% schema coverage, it fails to compensate for the undocumented account_label.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (reset or set the last run time) and the resource (the timestamp). It is distinct from sibling tools which handle accounts, mails, and mailboxes, so an agent can differentiate. However, it doesn't explain what 'last run' refers to, which slightly reduces clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention that it affects scheduling or that it can be scoped per account. No context is given for when a reset is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_watched_mailboxesA
계정의 폴더 제외 목록을 관리합니다. 폴더 발견은 자동이며, 여기서는 제외 목록만 관리합니다. add_exclude: 스캔에서 제외할 폴더 추가 (노이즈/대용량 폴더 등) remove_exclude: 제외 해제 (기존 제외 폴더 복원) reset_exclude: true이면 시스템 기본값으로 제외 목록 초기화 폴더명은 list_mailboxes의 currentImap 목록에서 확인하세요 (대소문자 정확히). 예: 다음 카페편지함 제외 → account_label:'다음개인', add_exclude:['카페편지함']
| Name | Required | Description | Default |
|---|---|---|---|
| add_exclude | No | 추가 제외 폴더 | |
| account_label | Yes | 설정할 계정 라벨 | |
| reset_exclude | No | 시스템 기본값으로 초기화 | |
| remove_exclude | No | 제외 해제 폴더 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does so concretely: add_exclude excludes folders from scanning for '노이즈/대용량 폴더 등', remove_exclude restores '기존 제외 폴더', and reset_exclude initializes to '시스템 기본값'. It also discloses that folder discovery is automatic. Gaps remain for edge cases like combining reset_exclude with add/remove or invalid folder names, but the core side effects are clearly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: one sentence stating the purpose, three terse parameter definitions, a lookup instruction, and a concrete example. It contains no filler; each clause carries operational information and the flow from purpose to parameters to example is natural.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating configuration tool with no annotations and no output schema, the description covers the essential invocation context: target account, the three operations, folder-name source and case sensitivity, and an example. It omits success/error response behavior and interaction between operations, but such details are not necessary to make a correct call for the common cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all four parameters (100% coverage), so the baseline is 3. The description adds real value beyond the schema: it explains that add_exclude targets noise/large folders, remove_exclude restores previously excluded folders, reset_exclude reverts to system defaults, and it adds the exact-case requirement for folder names ('대소문자 정확히') plus a concrete example mapping account_label:'다음개인' to add_exclude:['카페편지함'].
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise statement: '계정의 폴더 제외 목록을 관리합니다' (manages the account's folder exclusion list) and immediately distinguishes this from automatic folder discovery: '폴더 발견은 자동이며, 여기서는 제외 목록만 관리합니다.' It enumerates the three concrete operations (add_exclude, remove_exclude, reset_exclude), making the tool's resource and actions unmistakable and separating it from siblings like list_mailboxes or get_watched_mailboxes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: this tool is for exclusion-list management only, not for discovery ('폴더 발견은 자동이며'), and it instructs the agent to verify folder names against 'list_mailboxes의 currentImap 목록' with exact case ('대소문자 정확히'). However, it does not explicitly reference get_watched_mailboxes as the tool for viewing current exclusions, so the when-to-read vs when-to-write distinction is left somewhat implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v1.4.5- First observed
check_new_mails - First observed
generate_categories - First observed
get_watched_mailboxes - First observed
list_accounts - First observed
list_mailboxes - First observed
read_email - First observed
reset_last_run - First observed
set_watched_mailboxes
TDQS
Scored across 8 tools
Most tools have clear, distinct purposes, but list_mailboxes and get_watched_mailboxes both describe returning the same discovered/excluded/effective folder state, which creates real ambiguity. The detailed descriptions help, but an agent could still easily pick the wrong one.
All tool names follow a consistent lowercase snake_case verb_noun pattern: list_*, get_*, set_*, read_*, reset_*, generate_*, and check_new_mails. There are no mixed conventions or vague naming styles.
Eight tools is a reasonable and well-scoped size for an email monitoring server. However, the overlapping list_mailboxes/get_watched_mailboxes pair suggests the surface is slightly over-scoped, since one of those tools may be redundant.
The core monitoring loop is covered: list accounts, scan new mail, read bodies, generate categories, manage folder exclusions, and reset the checkpoint. Gaps like no per-account fetch, no category deletion/inspection, and no message actions are minor for a monitoring-focused tool but would limit broader email workflows.
Maintenance
Related MCP Connectors
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Connect any mailbox to Claude, ChatGPT & AI: read, send, reply, schedule & search emails.
Email safety MCP server. Detects phishing, prompt injection, CEO fraud for AI agents.
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Related MCP Servers
- FlicenseBqualityDmaintenanceAn MCP server that enables users to interact with their Naver Mail account via the Model Context Protocol. It allows for seamless mail integration and management within MCP-compatible clients like Claude Desktop.16-
- AlicenseAqualityDmaintenanceProvider-agnostic email MCP server that connects any IMAP mailbox to AI assistants, enabling email management through natural language.8AGPL 3.0
- AlicenseNot gradedqualityAmaintenanceA unified MCP server for email access across Gmail, Outlook, iCloud, and generic IMAP providers, enabling search, send, organize, and batch operations.1,076 npm23MIT
- FlicenseNot gradedqualityDmaintenanceA local MCP server that connects multiple Gmail and Google Calendar accounts to Claude Desktop, enabling email and calendar management across accounts.4-