Claude CodeでMailtrap MCPを使い、メール送信とテンプレートを管理する
MailtrapのMCPサーバーをClaude Codeに登録し、サンドボックスでの送信テスト、テンプレートの作成と更新、配信ログの確認までを進める手順です。
MailtrapのMCPサーバーでできること
Mailtrapはメール配信と、開発中のメールを安全に確かめるサンドボックスを備えたプラットフォームです。MailtrapのMCP(Model Context Protocol)サーバーは、そのアカウントをClaudeやCursor、VS Codeなど対応クライアントから自然言語で操作するための公式サーバーです。npmパッケージ名は mcp-mailtrap で、Node.jsのコマンドラインツールとして動きます。
扱える範囲は広く、リポジトリの機能一覧には次の6系統が並びます。
- Email APIとSMTPによるトランザクションメール・一括メールの送信
- Email Sandboxでの送信テスト(本文・ヘッダー・スパムスコアの確認)
- メールログの検索と、配信・バウンス・開封・クリックの集計
- 送信ドメイン、Webhook、サプレッションの管理
- コンタクトとリストの管理
- 請求の利用量、APIトークン、サブアカウントの管理
本記事は、このうち日常の開発で使う頻度が高い送信、サンドボックス、テンプレート、ログの4つに絞ります。メール送信は取り消せない操作なので、後半では誤送信と誤削除を防ぐ権限設定も扱います。
準備するもの: APIトークン・アカウントID・送信ドメイン
事前に必要なのは、Mailtrapアカウントの作成と送信ドメインの検証、APIトークンの取得です。テンプレートやログを扱うならアカウントIDも要ります。環境変数ごとの必要条件は次のとおりです。
| 環境変数 | 必要になる場面 |
|---|---|
MAILTRAP_API_TOKEN | 必要になる場面すべての機能で必須 |
MAILTRAP_ACCOUNT_ID | 必要になる場面テンプレート、統計、メールログ、サンドボックス一覧、送信ドメイン、サプレッション |
DEFAULT_FROM_EMAIL | 必要になる場面任意。呼び出しで from を省いたときの送信元 |
MAILTRAP_SANDBOX_ID | 必要になる場面任意。サンドボックスの既定の受信箱ID |
送信系のツールだけなら、アカウントIDは任意です。送るだけの用途なら、トークンと送信元アドレスの2つで始められます。
認証情報の場所はドキュメントに書かれています。APIトークンと送信元は、MailtrapのSending Domains > Integration > APIにあります。アカウントIDはSettings > Account Settings、サンドボックスIDはEmail Sandboxの受信箱のURLの中です。
Claude Codeに登録する
READMEが示すのは、Claude Desktop・Cursor向けのJSON設定とVS Code向けの設定です。Claude Code用の claude mcp add コマンドは載っていません。Claude Codeのドキュメントによれば、起動コマンドが示されているサーバーは、-- の後ろにコマンドを置き、環境変数を --env で渡す形に直せます。READMEの設定を直した例が次です。
claude mcp add mailtrap --transport stdio \
--env MAILTRAP_API_TOKEN=your_mailtrap_api_token \
--env MAILTRAP_ACCOUNT_ID=your_account_id \
--env DEFAULT_FROM_EMAIL=sender@example.com \
--env MAILTRAP_SANDBOX_ID=your_sandbox_id \
-- npx -y mcp-mailtrap--scope を付けなければ、設定は既定のローカルスコープに入ります。ローカルスコープは現在のプロジェクトだけで有効で、他のメンバーには共有されません。Claude Codeのドキュメントは、バージョン管理に入れたくない認証情報を持つサーバーに向く、と説明しています。
登録できたかは次のコマンドで見ます。
claude mcp get mailtrap接続状態は claude mcp list でも確認できます。環境変数を変えたあとは、MCPサーバーの再起動が必要です。READMEにも「envセクションを変えたらサーバーを再起動する」という注意があります。
チームで共有する場合
トークンを設定ファイルに直書きしない構成にするなら、プロジェクトスコープの .mcp.json で環境変数の展開を使います。${VAR} と ${VAR:-default} の2つの書式が使えます。
{
"mcpServers": {
"mailtrap": {
"command": "npx",
"args": ["-y", "mcp-mailtrap"],
"env": {
"MAILTRAP_API_TOKEN": "${MAILTRAP_API_TOKEN}",
"MAILTRAP_ACCOUNT_ID": "${MAILTRAP_ACCOUNT_ID}",
"DEFAULT_FROM_EMAIL": "${DEFAULT_FROM_EMAIL:-noreply@example.com}"
}
}
}
}各メンバーはシェルの環境変数にトークンを持ちます。未設定の変数があるとClaude Codeは claude mcp list で警告を出します。
まずサンドボックスで送信を試す
本番の宛先に届く前に、サンドボックスの受信箱で見た目を確かめます。READMEの使用例にも「サンドボックスにメールを送って、ウェルカムメールの見え方を確認する」という依頼があります。
ここで使うのは send-sandbox-email です。受信箱は sandbox_id で指定します。環境変数 MAILTRAP_SANDBOX_ID を設定済みなら、省略できます。
Claude Codeには、たとえば次のように頼みます。
サンドボックスに件名「登録ありがとうございます」のHTMLメールを送って。
本文は2行で、ボタンのリンクは https://example.com/start にして。
送ったあと、サンドボックスの最新メッセージの詳細を見せて。READMEの使用例にある「サンドボックスのメッセージを検索する」「IDを指定して詳細を見る」依頼が、確認の側に対応します。Mailtrapのサンドボックスは、スパムスコアやHTMLのクライアント互換性も調べる機能として紹介されています。本文を書き直してもう一度送る反復は、Claude Codeが直した結果をすぐ受信箱で見られる点で相性が良い使い方です。
テンプレートを作る・更新する・送る
テンプレート管理には5つのツールがあります。
| ツール | 役割 | 必須の引数 |
|---|---|---|
create-template | 役割新規作成 | 必須の引数name、subject、html か text |
list-templates | 役割一覧 | 必須の引数なし(per_page は既定50、最大100) |
get-template | 役割1件取得(件名と本文を含む) | 必須の引数template_id |
update-template | 役割更新 | 必須の引数template_id と更新項目1つ以上 |
delete-template | 役割削除 | 必須の引数template_id |
create-template の category は省略すると「General」になります。update-template は、name・subject・html・text・category のうち少なくとも1つを渡さないと更新になりません。
テンプレートを使って送る
send-email と send-sandbox-email は、2つのモードを同時には使えません。
送信の2つのモード
本文を直接渡す
subject と、text か html を渡します。category も指定できます。
テンプレートを使う
template_uuid を渡し、差し込み値は template_variables で渡します。このとき subject・text・html・category は渡せません。
READMEの例は「ウェルカムテンプレート(uuid付き)を、変数 { name: 'Alex' } を入れてnew@example.comに送る」です。
テンプレートを指定したうえで「件名だけ今回は変えて」と頼むと、仕様上は成立しません。件名を変えたいなら、update-template でテンプレート側を直すか、インラインに切り替えます。
一括送信には batch-send-transactional-email と batch-send-bulk-email があります。共通項目を base に置き、宛先ごとの差分を requests に並べる構造です。両者の違いは経由するAPIだけで、前者はトランザクション用、後者は一括配信用のエンドポイントを通ります。
削除後の一覧に注意
list-templates はページ番号方式で、新しい順の位置で区切られます。テンプレートを削除したあとは、続きのトークンではなくトークン1から取り直すよう、READMEに書かれています。Claudeに「古いテンプレートを順に消して」と頼むときは、この挙動で取りこぼしが出る可能性があります。1件ずつ一覧を取り直す指示にしておくと確実です。
届いたかを確かめる: ログと統計
list-email-logs は、送信履歴をフィルタ付きで引きます。宛先(to_email)、状態(status: delivered・not_delivered・enqueued・opted_out)、期間(sent_after・sent_before)、イベント(delivery・open・click・bounce・spamなど)で絞れます。すべての引数が任意です。
1通の詳細は get-email-log-message に、一覧で得たメッセージIDを渡して見ます。include_content: true を付けると、本文のHTMLとプレーンテキストも読み込みます。ただし、生のメッセージURLが公開されているときに限られます。
集計は get-sending-stats です。start_date と end_date が必須で、breakdown で内訳を選びます。
aggregated(既定)by_domainby_categoryby_email_service_providerby_date
「ユーザーに確認メールが届かない」という問い合わせの切り分けでは、次の順に頼めます。
- 宛先アドレスで
list-email-logsを引き、状態を見る - 該当メッセージの
get-email-log-messageでイベント履歴を読む - READMEの例にある「なぜこのアドレスにメールが届かないのか」の依頼で、サプレッション(配信抑止)の登録を調べる
3の依頼は、READMEの「Suppressions」の使用例として載っています。
公式ページ同士で食い違う3か所
Mailtrapの情報源は、GitHubのREADME、docs.mailtrap.ioのMCPページ、ブログ(統合ページ)の3つに分かれており、内容が揃っていません。手順どおりに進めてつまずくなら、まず次の3点を疑ってください。
| 項目 | READMEの記載 | ドキュメント・ブログの記載 |
|---|---|---|
| サンドボックスIDの環境変数 | READMEの記載MAILTRAP_SANDBOX_ID | ドキュメント・ブログの記載MAILTRAP_TEST_INBOX_ID |
| アカウントIDが要る範囲 | READMEの記載テンプレート、統計、ログ、サンドボックス一覧、送信ドメイン、サプレッション | ドキュメント・ブログの記載ドキュメントは「テンプレート管理用」とだけ記載 |
| Smitheryでの導入 | READMEの記載npx -y smithery mcp add mailtrap/mailtrap-mcp --client claude | ドキュメント・ブログの記載ブログは npx @smithery/cli install mailtrap |
READMEは MAILTRAP_TEST_INBOX_ID を旧名の別名として今も読み込むと説明しています。どちらの名前でも動く前提ですが、新しく設定するなら MAILTRAP_SANDBOX_ID が無難です。ドキュメントのとおりに「アカウントIDはテンプレート用」と受け取って省くと、ログや統計のツールが使えなくなります。
Smitheryのコマンドは2通り載っているため、どちらが現行かはページからは決められません。Claude Codeでは、前述の claude mcp add で直接登録するほうが、変更点が少なく確実です。
本番送信と削除に歯止めをかける
Claudeが会話の流れで本番の宛先にメールを送ったり、テンプレートを消したりする事故は、権限設定で防げます。Claude Codeでは、MCPツールを mcp__<サーバー名>__<ツール名> の形で指定します。サーバー名を mailtrap で登録したなら、本番送信は mcp__mailtrap__send-email です。
.claude/settings.json に次を書くと、本番系は毎回確認を求め、削除と一括配信は禁止にできます。
{
"permissions": {
"ask": [
"mcp__mailtrap__send-email",
"mcp__mailtrap__batch-send-transactional-email",
"mcp__mailtrap__update-template"
],
"deny": [
"mcp__mailtrap__delete-template",
"mcp__mailtrap__batch-send-bulk-email"
]
}
}サンドボックス向けの send-sandbox-email は実在の宛先に届かないため、設定に入れず、そのまま使えるようにしておくとテストが回しやすくなります。パラメータまで絞る mcp__ のルール(括弧付き)は、Claude Codeが読み込み時に飛ばします。絞り込みはツール単位で行います。
delete-template については、削除を取り消す手段がドキュメントに記載されていません。復元できる前提で運用しないでください。
Claude Desktopで使う場合
Claude Desktopには2つの入り口があります。READMEでは、Releasesから .mcpb ファイル(MCP Bundle)をダウンロードして開くと、Claude Desktopが設定を促します。ドキュメント側では、設定のConnectorsからDesktop extensionsを選び、「Mailtrap」で検索する方法が案内されています。手動で設定する場合のファイルは、Macなら ~/Library/Application Support/Claude/claude_desktop_config.json です。
前節の settings.json による制限はClaude Code側の仕組みです。Claude Desktopで本番送信を扱うなら、依頼文に「実際に送る前に宛先と本文を提示して」と書き添える運用が現実的です。ブログも、エージェントが操作を実行するのはユーザーの確認のあとだと説明しています。
よくあるつまずき
落とし穴
テンプレートID(数値)とUUIDを取り違える
get-template や update-template が使うのは template_id で、send-email が使うのは template_uuid です。引数の名前が違います。READMEの使用例でも、更新・削除は数値のID(12345など)、送信はuuidで示されています。一覧の結果から、どちらの値を渡しているかを確かめます。
落とし穴
送信元の指定を忘れる
from を省くと DEFAULT_FROM_EMAIL が使われます。どちらも設定していない状態で頼むと、送信元の情報が足りません。Mailtrapの準備手順に「送信ドメインを検証する」が含まれており、送信元には検証済みドメインのアドレスを使う前提です。
落とし穴
設定を変えたのに反映されない
env を書き換えたあとは、MCPサーバーを再接続します。Claude Codeでは、対話セッション内の /mcp から再接続できます。
asdfでNode.jsを管理している場合
npx が見つからずに起動に失敗することがあります。READMEは、asdfのシムを絶対パスで command に指定し、PATH や ASDF_NODEJS_VERSION も env に渡す設定例を載せています。
まとめ
MailtrapのMCPは、送信、テンプレート、ログ、統計を1つのサーバーで扱えるぶん、本番に影響する操作も同じ口に並びます。サンドボックスで本文を詰め、テンプレートに落とし、send-email と削除系だけ権限で止める。この順番にすると、メール運用をClaudeに任せても事故が起きにくくなります。
同じメール配信でもResendを使っている場合は、Resend MCPサーバーの使い方が対応します。ほかのサービスのMCP接続も同じ型で進められます。たとえばデータベースならSupabase MCPサーバー、ホスティングならRender MCPサーバーが参考になります。ドメインやDNSの管理はHostinger MCPの記事にまとめています。