Claude Media
Claude CodeでMailtrap MCPを使い、メール送信とテンプレートを管理する

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_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_domain
  • by_category
  • by_email_service_provider
  • by_date

「ユーザーに確認メールが届かない」という問い合わせの切り分けでは、次の順に頼めます。

  1. 宛先アドレスで list-email-logs を引き、状態を見る
  2. 該当メッセージの get-email-log-message でイベント履歴を読む
  3. 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の記事にまとめています。

この記事を共有:XはてブLinkedIn