mcpField
E
Email (IMAP/SMTP)

Email (IMAP/SMTP)

ローカル
github.com/boutquinコミュニケーション333 週間前に更新

Email (IMAP/SMTP) について

Email (IMAP/SMTP) は、LLM 向けの複数アカウント対応メール MCP サーバーです。IMAP/SMTP でメールの閲覧、送信、検索、整理を行い、OAuth2 や接続プール、レート制限、リトライも備えています。

主な機能

  1. 01複数アカウントのメールアクセス
  2. 02メールの閲覧・検索・整理
  3. 03メールの送信・返信・転送
  4. 04添付ファイルとスレッドの操作
  5. 05OAuth2 デバイスコード認証
  6. 06接続プール・制限・リトライ

活用シーン

  1. 01複数アカウントを横断したメール検索
  2. 02受信トレイの一括整理
  3. 03添付ファイル付きメールの送信
  4. 04メールスレッドと添付ファイルの確認

MCP 対応

アカウント、フォルダー、メール、添付ファイル、下書きを扱う 22 種類のメールツールを MCP クライアントに公開します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"boutquin-email": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"EMAIL_CONFIG_FILE",
"-e",
"EMAIL_ACCOUNTS",
"ghcr.io/boutquin/mcp-server-email:latest"
],
"env": {
"EMAIL_CONFIG_FILE": "<EMAIL_CONFIG_FILE>",
"EMAIL_ACCOUNTS": "<EMAIL_ACCOUNTS>"
}
}
}
}
起動コマンドdocker run -i --rm -e EMAIL_CONFIG_FILE -e EMAIL_ACCOUNTS ghcr.io/boutquin/mcp-server-email:latest
設定が必要な環境変数
EMAIL_CONFIG_FILEPath to account JSON config file
EMAIL_ACCOUNTSシークレットInline JSON array of account configs

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocighcr.io/boutquin/mcp-server-email:latest

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

mcp-server-email

CI codecov Go License: MIT MCP

Model Context Protocol 用の複数アカウント対応メールサーバーです。LLM が IMAP/SMTP 経由でメールの読み取り、送信、検索、整理を行えるようにします。接続プーリング、レート制限、再試行に対応しています。apple-bridge(ローカルの Mail.app へのアクセス)に対する、リモートメール用の機能として設計されています。

クイックスタート

  1. インストール

    go install github.com/boutquin/mcp-server-email/cmd/mcp-server-email@latest
    
  2. 設定ファイルを作成(~/.config/mcp-email/accounts.json)

    よく利用されるプロバイダー(Gmail、Outlook、Yahoo、iCloud、Fastmail、Zoho)の場合、メールドメインからホストとポートが自動検出されます。認証情報を指定するだけです。

    [
      {
        "id": "hello",
        "email": "[email protected]",
        "username": "[email protected]",
        "password": "app-password-here"
      }
    ]
    

    カスタムメールサーバーの場合は、ホストとポートを明示的に指定します。

    [
      {
        "id": "work",
        "email": "[email protected]",
        "imap_host": "mail.example.com",
        "imap_port": 993,
        "smtp_host": "mail.example.com",
        "smtp_port": 465,
        "username": "[email protected]",
        "password": "app-password-here"
      }
    ]
    
    chmod 600 ~/.config/mcp-email/accounts.json
    
  3. Claude Code に追加(~/.claude.json)

    {
      "mcpServers": {
        "email": {
          "command": "mcp-server-email",
          "env": {
            "EMAIL_CONFIG_FILE": "~/.config/mcp-email/accounts.json"
          }
        }
      }
    }
    
  4. Claude Code を再起動 — email_* ツールが使用できるようになります。

インストール

Go Install(Go 開発者におすすめ)
go install github.com/boutquin/mcp-server-email/cmd/mcp-server-email@latest
Homebrew(macOS/Linux)
brew install boutquin/tap/mcp-server-email
バイナリのダウンロード

お使いのプラットフォーム用のビルド済みバイナリを GitHub Releases からダウンロードしてください。

対応プラットフォーム:Linux(amd64、arm64)、macOS(amd64、arm64)、Windows(amd64、arm64)。

Docker
docker run --rm \
  -e EMAIL_ACCOUNTS='[{"id":"main","email":"[email protected]","imap_host":"mail.example.com","imap_port":993,"smtp_host":"mail.example.com","smtp_port":465,"username":"[email protected]","password":"app-password"}]' \
  ghcr.io/boutquin/mcp-server-email:latest
MCP Bundle(Claude Desktop)

Releases から .mcpb ファイルをダウンロードし、Claude Desktop で開いてください。

ソースからビルド
git clone https://github.com/boutquin/mcp-server-email.git
cd mcp-server-email
go build -o mcp-server-email ./cmd/mcp-server-email

設定

アカウントは起動時に一度だけ読み込まれます。変更を反映するには、サーバーを再起動する必要があります。

設定ファイルと環境変数
方法適した用途
EMAIL_CONFIG_FILE — JSON ファイルへのパス本番環境での使用。ファイルのアクセス権を制限できます(chmod 600)
EMAIL_ACCOUNTS — 環境変数内のインライン JSONテスト、CI、コンテナ化されたデプロイ

両方が設定されている場合は、EMAIL_ACCOUNTS が優先されます。

アカウント JSON スキーマ
[
  {
    "id": "hello",
    "email": "[email protected]",
    "imap_host": "mail.example.com",
    "imap_port": 993,
    "smtp_host": "mail.example.com",
    "smtp_port": 465,
    "username": "[email protected]",
    "password": "app-password-here"
  }
]
フィールド必須説明
idはい一意のアカウント識別子
emailはいメールアドレス
imap_hostいいえ*IMAP サーバーのホスト名
imap_portいいえ*IMAP ポート(993 = 暗黙的 TLS、143 = STARTTLS)
smtp_hostいいえ*SMTP サーバーのホスト名
smtp_portいいえ*SMTP ポート(465 = 暗黙的 TLS、587 = STARTTLS)
usernameはいログインユーザー名
passwordはい**アプリパスワードまたはアカウントのパスワード
use_starttlsいいえTLS の自動検出を上書きします(true/false)
insecure_skip_verifyいいえTLS 証明書の検証をスキップします(開発・テスト用)
auth_methodいいえ"password"(デフォルト)または "oauth2"
oauth_client_idいいえOAuth2 クライアント ID(auth_method が "oauth2" の場合に必須)
oauth_client_secretいいえOAuth2 クライアントシークレット
oauth_token_fileいいえトークンファイルのパスを上書きします

*よく利用されるプロバイダーの場合、ホストとポートは自動検出されます(下記参照)。カスタムサーバーでは必須です。 **OAuth2 認証を使用する場合は不要です。

プロバイダーの自動検出

imap_host/smtp_host が省略されている場合、サーバーはメールドメインから設定を検出します。

プロバイダードメインIMAPSMTP
Gmailgmail.com、googlemail.comimap.gmail.com:993smtp.gmail.com:587
Outlookoutlook.com、hotmail.com、live.comoutlook.office365.com:993smtp.office365.com:587
Yahooyahoo.comimap.mail.yahoo.com:993smtp.mail.yahoo.com:587
iCloudicloud.com、me.com、mac.comimap.mail.me.com:993smtp.mail.me.com:587
Fastmailfastmail.com、fastmail.fmimap.fastmail.com:993smtp.fastmail.com:587
Zohozoho.com、zohomail.comimap.zoho.com:993smtp.zoho.com:587

設定でホスト/ポートが明示的に指定されている場合は、常に自動検出より優先されます。

TLS モード

TLS モードはポートから自動検出されます。

ポートプロトコルモード
993IMAP暗黙的 TLS
143IMAPSTARTTLS
465SMTP暗黙的 TLS
587SMTPSTARTTLS

アカウントオブジェクトで "use_starttls": true または "use_starttls": false を指定すると上書きできます。自動検出を使用する場合(推奨)は省略してください。

OAuth2 認証

対応しているプロバイダー(Gmail、Outlook)では、アプリパスワードの代わりに OAuth2 を使用できます。デバイスコードフロー(RFC 8628)を使用するため、ブラウザーへのリダイレクトは不要です。

  1. プロバイダーの開発者コンソール(Google Cloud Console または Azure AD)で OAuth2 認証情報を作成します

  2. auth_method: "oauth2" を指定して アカウントを設定します。

    [
      {
        "id": "gmail",
        "email": "[email protected]",
        "username": "[email protected]",
        "auth_method": "oauth2",
        "oauth_client_id": "your-client-id.apps.googleusercontent.com",
        "oauth_client_secret": "your-client-secret"
      }
    ]
    
  3. 初回接続時に、サーバーがデバイスコードフローを開始し、確認用 URL とコードを stderr に出力します。URL にアクセスし、コードを入力して認証します。

  4. トークンは ~/.config/mcp-email/tokens/ に保存され、自動的に更新されます。2 回目以降の接続では、保存済みトークンが再利用されるため、再認証は不要です。

OAuth2 対応プロバイダー:Gmail(gmail.com、googlemail.com)および Outlook(outlook.com、hotmail.com、live.com)。

環境変数
変数必須デフォルト説明
EMAIL_CONFIG_FILEはい*—JSON 設定ファイルのパス
EMAIL_ACCOUNTSはい*—アカウント設定の JSON 配列(インライン)
EMAIL_DEFAULT_ACCOUNTいいえ最初のアカウントデフォルトのアカウント ID
EMAIL_IMAP_TIMEOUT_MSいいえ30000IMAP 操作のタイムアウト(ms)
EMAIL_SMTP_TIMEOUT_MSいいえ30000SMTP 操作のタイムアウト(ms)
EMAIL_IMAP_RATE_LIMITいいえ60アカウントあたりの IMAP リクエスト数/分
EMAIL_SMTP_RATE_LIMITいいえ100アカウントあたりの SMTP 送信数/時間
MAX_ATTACHMENT_SIZE_MBいいえ18添付ファイル 1 件あたりの最大サイズ(MB)
MAX_TOTAL_ATTACHMENT_SIZE_MBいいえ18メッセージあたりの添付ファイル合計の最大サイズ(MB)
MAX_DOWNLOAD_SIZE_MBいいえ25添付ファイルの最大ダウンロードサイズ(MB)
EMAIL_POOL_CLOSE_TIMEOUT_MSいいえ5000プールのクローズタイムアウト(ms)
EMAIL_DEBUGいいえfalsestderr へのデバッグログ出力
LOG_LEVELいいえinfoログレベル:debug、info、warn、error
LOG_FORMATいいえjsonログ形式:json または text

*EMAIL_CONFIG_FILE または EMAIL_ACCOUNTS のいずれかが必要です。

設定ファイルのアクセス権

設定ファイルにはアカウントのパスワードが含まれています。必ずアクセスを制限してください。

chmod 600 ~/.config/mcp-email/accounts.json

ツール(22)

アカウントとフォルダーのツール
ツール説明主なパラメーター
email_accounts接続状況とともに設定済みアカウントを一覧表示—
email_folders未読数/合計数とともにすべてのフォルダーを一覧表示account?
email_folder_create新しいフォルダーを作成name、account?
メッセージの一覧表示
ツール説明主なパラメーター
email_listフォルダー内のメッセージを一覧表示folder?, limit?, offset?, includeBody?, account?
email_unread未読メッセージを一覧表示folder?, limit?, includeBody?, account?
email_search件名と本文を検索query, from?, to?, since?, before?, folder?, limit?, includeBody?, account?
メッセージの操作
ツール説明主なパラメーター
email_getIDでメッセージ全体を取得id
email_read_bodyページネーションを使ってメール本文を読むid, offset?, limit?, format?
email_moveメッセージをフォルダーに移動id, destination
email_copyメッセージをフォルダーにコピーid, destination
email_deleteメッセージを削除(ゴミ箱に移動、または完全に消去)id, permanent?
email_mark_read既読/未読に設定id, read
email_flagメッセージにフラグを設定/解除id, flagged
email_replyメッセージに返信(In-Reply-To、Referencesを設定し、本文を引用)id, body, all?, cc?, bcc?, isHtml?, account?
email_forwardメッセージを転送(元の添付ファイルを再添付)id, to, body?, cc?, bcc?, isHtml?, account?
email_batch複数のメッセージに対する一括操作action, ids, destination?, permanent?, read?, flagged?
添付ファイルとスレッド
ツール説明主なパラメーター
email_attachment_listメッセージの添付ファイルを一覧表示id
email_attachment_getインデックスで添付ファイルをダウンロードid, index, saveTo?
email_thread会話スレッドを取得(INBOX、Sent、Archive、All Mailを横断して検索)id
送信と下書き
ツール説明主なパラメーター
email_send任意の添付ファイルを付けてSMTP経由で送信to, subject, body, cc?, bcc?, replyTo?, isHtml?, attachments?, account?
email_draft_create任意の添付ファイルを付けて下書きを保存to?, subject?, body?, cc?, bcc?, isHtml?, attachments?, account?
email_draft_send既存の下書きを送信id

省略可能なaccountパラメーターはすべて、設定済みのデフォルトアカウントを使用します。

検索

email_searchはIMAPのSEARCH OR (SUBJECT "q") (BODY "q")を使用して、件名と本文の両方を検索します。

省略可能なフィルターを使うと、本文をスキャンする前にサーバー側で候補を絞り込めます。

フィルター形式例
fromメールアドレスまたは名前"[email protected]"
toメールアドレスまたは名前"[email protected]"
sinceYYYY-MM-DD"2026-01-01"
beforeYYYY-MM-DD"2026-02-01"

既存の操作タイムアウト(デフォルト30秒)により、大きなメールボックスで本文検索がハングするのを防ぎます。

添付ファイル

email_sendとemail_draft_createは、サーバーホスト上のファイル参照を指定するattachmentsパラメーター(配列)を受け付けます。

{
  "attachments": [
    {"path": "/tmp/report.pdf"},
    {"path": "/tmp/data.csv", "filename": "Q1-data.csv", "content_type": "text/csv"}
  ]
}
パラメーター必須説明
pathはいサーバーホスト上の絶対ファイルパス
filenameいいえ表示ファイル名を上書きします(デフォルトはpathのベース名)
content_typeいいえMIMEタイプ(省略した場合、ファイル拡張子から自動検出)

制限(デフォルト): 1ファイルあたり18 MB、合計18 MB(base64エンコード前。エンコード後もSMTPの上限25 MB以内に収まります)。環境変数MAX_ATTACHMENT_SIZE_MBおよびMAX_TOTAL_ATTACHMENT_SIZE_MBで設定できます。

ダウンロード制限: 添付ファイルのダウンロード(email_attachment_get)はデフォルトで25 MBまでです。環境変数MAX_DOWNLOAD_SIZE_MBで設定できます。

検証に失敗した場合(ファイルが見つからない、絶対パスでない、サイズ超過)は、INVALID_ARGUMENTを返します。

メッセージ ID

メッセージ ID は、アカウント、メールボックス、UID をエンコードした複合文字列です。

{account}:{mailbox}:{uid}

例:hello:INBOX:12345

すべての CRUD ツール(email_get、email_move、email_copy、email_delete、email_mark_read、email_flag、email_draft_send)は、ID からアカウントとフォルダーを抽出するため、別途パラメーターを指定する必要はありません。

エラーコード

すべてのエラーは、構造化されたコードのプレフィックス付きで MCP ツールエラーとして返されます。

コード意味
AUTH_FAILEDIMAP/SMTP 認証に失敗しました
CONNECTION_FAILEDサーバーに接続できません
ACCOUNT_NOT_FOUND不明なアカウント ID です
FOLDER_NOT_FOUNDメールボックスが存在しません
MESSAGE_NOT_FOUNDメールボックス内に UID が見つかりません
INVALID_ARGUMENTパラメーターがないか、無効です(添付ファイルの検証を含む)
TIMEOUT操作がタイムアウトしました
INTERNAL予期しないサーバーエラーです

リソース

URI説明
email://statusサーバーのバージョン、アカウントの接続状態、レート制限の設定

apple-bridge との比較

このサーバーと apple-bridge は、Email モデルとパラメーターのセマンティクス(limit、includeBody、folder、query)を共有しているため、LLM は両者を互換的に使用できます。主な違いは次のとおりです。

項目mcp-server-emailapple-bridge
トランスポートIMAP/SMTP(リモート)Mail.app(ローカル)
ツールのプレフィックスemail_*mail_*
メッセージ ID{account}:{mailbox}:{uid}RFC 5322 Message-ID
フォルダーの作成対応非対応(Mail.app では UI が必要)
メッセージのコピー対応非対応
下書きの送信対応非対応(Mail.app では作成 UI を使用)
添付ファイル(送信)サーバーホスト上のファイルパス未対応

開発

前提条件
ビルド
go build ./...
単体テスト
make test
# or: go test -race -count=1 ./...

単体テストでは、imap.Operations と smtp.Operations インターフェースのモック実装を使用するため、稼働中のメールサーバーは必要ありません。

ベンチマーク
go test -bench=. -benchmem ./...
ベンチマークパッケージ測定内容
BenchmarkPoolGetReleaseimap接続プールの取得/解放サイクル
BenchmarkExtractAttachmentsimapMIME 添付ファイルの抽出
BenchmarkHtmlToTexttoolsHTML からプレーンテキストへの変換
BenchmarkLimiterAllowretryレートリミッター(逐次処理)
BenchmarkLimiterAllow_Parallelretryレートリミッター(並列処理)
ファズテスト

ファズテストのターゲットには、testdata/fuzz/ ディレクトリ内のシードコーパスが付属しています。特定のターゲットを実行するには、次のようにします。

go test -fuzz=FuzzParseMessageID ./internal/models/ -fuzztime=30s
ターゲットパッケージファズテストの対象
FuzzBuildSearchCriteriaimapIMAP 検索クエリビルダー
FuzzExtractAttachmentByIndeximap添付ファイルのインデックス境界処理
FuzzExtractContentTypeimapMIME Content-Type パーサー
FuzzParseMessageIDmodels複合メッセージ ID のコーデック
FuzzHtmlToTexttoolsHTML からテキストへのサニタイザー
FuzzSplitAddressestoolsメールアドレスリストの分割処理
リント
make lint
# or: golangci-lint run ./...
統合テスト

統合テストでは、実際のメールサーバーに対して IMAP/SMTP スタック全体をテストします。これらのテストは integration ビルドタグで分離されており、go test ./... の実行時には実行されません。

メールサーバー:Greenmail

テストでは、Docker イメージとしてパッケージ化された軽量な Java メールサーバーである Greenmail を使用します。実行方法に影響する主な詳細は次のとおりです。

設定値重要な理由
IMAPS ポート3993Greenmail の SSL IMAP ポートです(993 ではありません)。コードはポート番号から TLS を自動検出するため、テストでは UseStartTLS=false を明示的に設定し、この標準外ポートで暗黙的 TLS を使用します。
SMTPS ポート3465Greenmail の SSL SMTP ポートです(465 ではありません)。同様に UseStartTLS=false で上書きします。
バインドアドレス0.0.0.0Greenmail はコンテナ内で 127.0.0.1 をデフォルトにします。そのため Docker のポートマッピングがひそかに失敗し、接続が EOF になります。-Dgreenmail.hostname=0.0.0.0 を必ず渡してください。
ユーザー名testGreenmail は、ログインユーザー名にメールアドレス全体ではなく、@ より前のローカル部のみを使用します。ユーザーが [email protected] の場合、IMAP/SMTP のユーザー名は test です。
TLS 証明書自己署名Greenmail は自己署名証明書を生成します。テストではアカウント設定で InsecureSkipVerify: true を設定し、証明書を受け入れます。
クイックスタート(1 コマンド)
make test-integration

Greenmail コンテナを起動し、すべての統合テストを実行した後、成功・失敗にかかわらずコンテナを削除します。

手動での手順

コンテナを毎回再起動せずにテストを繰り返し実行する場合は、次の手順に従ってください。

  1. Greenmail を起動

    docker run -d --name greenmail \
      -p 3465:3465 -p 3993:3993 \
      -e "GREENMAIL_OPTS=-Dgreenmail.setup.test.all -Dgreenmail.users=test:[email protected] -Dgreenmail.hostname=0.0.0.0" \
      greenmail/standalone:2.1.0
    

    JVM が起動するまで約 3 秒待ちます。

  2. 統合テストを実行

    TEST_IMAP_HOST=localhost TEST_IMAP_PORT=3993 \
    TEST_SMTP_HOST=localhost TEST_SMTP_PORT=3465 \
    [email protected] TEST_PASSWORD=password \
      go test -tags=integration -race -v ./...
    
  3. 完了したら停止

    docker stop greenmail && docker rm greenmail
    
テスト環境変数
変数必須デフォルト説明
TEST_IMAP_HOSTはい*—IMAP サーバーのホスト名です。未設定の場合、テストはスキップされます。
TEST_IMAP_PORTいいえ3993IMAPS ポート
TEST_SMTP_HOSTはい*—SMTP サーバーのホスト名です。未設定の場合、テストはスキップされます。
TEST_SMTP_PORTいいえ3465SMTPS ポート
TEST_EMAILいいえ[email protected]テストアカウントのメールアドレス
TEST_USERNAMEいいえTEST_EMAIL のローカル部IMAP/SMTP のログインユーザー名(Greenmail はローカル部のみを使用)
TEST_PASSWORDいいえpasswordアカウントのパスワード

*対応する HOST 変数が未設定の場合、そのテストファイルのテストは失敗ではなく、メッセージを表示してスキップされます。

テストの対象範囲

IMAP(internal/imap/integration_test.go — 7 件のテスト):

テスト検証内容
ConnectAndListFoldersTLS 接続、認証、フォルダー一覧の取得、INBOX の存在
SendAndListMessagesSMTP 送信から IMAP 受信までの往復、本文の内容一致
SearchBySubject件名文字列による IMAP SEARCH
DeleteMessagePermanent削除フラグの設定と expunge、メッセージが削除されたことの確認
MoveMessageIMAP MOVE による別フォルダーへの移動(サーバーが MOVE 拡張に対応していない場合はスキップ)
DraftWorkflowSaveDraft → GetDraft → DeleteDraft のライフサイクル(APPENDUID がない場合はスキップ)
MarkReadAndFlag既読・フラグ付きフラグの設定と、GetMessage による確認

SMTP(internal/smtp/integration_test.go — 4 件のテスト):

テスト検証内容
SendPlainTextプレーンテキストメールの配信、IMAP による本文内容の確認
SendHTMLHTML メールの配信、Content-Type が text/html であることの確認
SendWithAttachment添付ファイル付きのマルチパート MIME、メタデータに含まれるファイル名の確認
RateLimitTokenConsumption送信によるレート制限トークンの消費
トラブルシューティング
症状原因対処方法
接続時に EOF または connection reset が発生するコンテナ内で Greenmail が 127.0.0.1 にバインドされているGREENMAIL_OPTS に -Dgreenmail.hostname=0.0.0.0 を追加します
TLS handshake failure/証明書エラーが発生する自己署名証明書が拒否されているテスト設定ではすでに InsecureSkipVerify: true を設定しています。新しいテストを書く場合も同様にしてください
Invalid login/password が発生するメールアドレス全体をユーザー名として使用しているGreenmail が想定するのはローカル部分のみです([email protected] ではなく test)。TEST_USERNAME を設定するか、デフォルト値を使用してください。
ポート 3993 で STARTTLS エラーが発生する暗黙的な TLS 用のポートで STARTTLS を使用しているテスト設定では UseStartTLS=false を設定しています。ポート 3143/3025(平文、TLS なし)は使用しないでください。
「not set」と表示されてテストがスキップされるTEST_IMAP_HOST/TEST_SMTP_HOST がエクスポートされていない環境変数をエクスポートするか、make test-integration ターゲットを使用してください
MoveMessage テストがスキップされるGreenmail が MOVE をサポートしていない可能性がある想定どおりです。このテストでは t.Skip() を使用しています
CI

統合テストは、.github/workflows/ci.yml の integration ジョブを通じて GitHub Actions で自動的に実行されます。このジョブでは Greenmail のサービスコンテナを使用するため、手動で Docker を設定する必要はありません。詳しい設定については、ワークフローファイルを参照してください。

カバレッジ

単体テストと統合テストをまとめたカバレッジレポートを生成するには、次のコマンドを実行します。

# With Greenmail running (see above):
TEST_IMAP_HOST=localhost TEST_IMAP_PORT=3993 \
TEST_SMTP_HOST=localhost TEST_SMTP_PORT=3465 \
[email protected] TEST_PASSWORD=password \
  go test -tags=integration -race -coverprofile=coverage.out ./...

go tool cover -func=coverage.out | tail -1   # total percentage
go tool cover -html=coverage.out             # open in browser
アーキテクチャ
mcp-server-email/
├── cmd/mcp-server-email/     # Entry point
└── internal/
    ├── auth/                 # OAuth2 device code flow, XOAUTH2 SASL, token store
    ├── config/               # Multi-account configuration, provider auto-detection
    ├── imap/                 # IMAP client (split by concern), connection pool, Operations interface
    │   ├── client.go         # Client struct, lifecycle, shared helpers
    │   ├── client_messages.go # List, search, get, attachments
    │   ├── client_folders.go  # Folder ops, role cache
    │   ├── client_drafts.go   # Draft save/get/delete
    │   ├── client_flags.go    # Flags, move, copy, delete
    │   └── pool.go           # Connection pool with configurable close timeout
    ├── log/                  # Structured logging (slog) initialization
    ├── models/               # Email model, message ID codec, error types
    ├── resources/            # email://status resource
    ├── retry/                # Token-bucket rate limiter
    ├── smtp/                 # SMTP client, Operations interface
    └── tools/                # 22 MCP tool handlers + registration

ツールハンドラーは imap.Operations および smtp.Operations インターフェースを介して IMAP/SMTP クライアントから分離されており、モックを使った包括的な単体テストが可能です。

依存関係

このプロジェクトでは go-imap v2(現在 v2.0.0-beta.8)を使用しています。 v2 API はまだ安定していないため、v2.0.0 のリリース前に破壊的変更が発生する可能性があります。 go.mod で正確なバージョンを固定しており、安定版のリリース後は速やかにアップグレードします。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。