Mailgun
公式Mailgun APIと連携します。
Mailgun MCPで何ができますか?
- メールを送信 — 送信ドメインとアドレスを選択して、アシスタントにメールの送信を依頼します。
- アドレスを検証 — 送信前に
validateでメールアドレスの構文と配信可能性を確認します。 - 受信トレイへの配置を確認 —
optimizeでシードテストの結果を取得し、プロバイダーごとにメッセージがどこに届いたかを要約します。 - レンダリングをプレビュー —
inspectでメールのプレビュー結果を取得し、各クライアントでの表示を確認します。 - 配信可能性を調査 — ドメインのバウンス分類統計、配信停止、苦情を確認します。
- テンプレートとリストを管理 — メンバーを含むメールテンプレートやメーリングリストを作成または更新します。
ドキュメント
Mailgun MCP Server
概要
Mailgun 用の Model Context Protocol (MCP) サーバーです。AI エージェントがメールの送信、配信状況の診断、アカウント操作の管理を行うための、実用的でワークフロー指向のインターフェースを提供します。
[!NOTE] この MCP サーバーはお使いのマシン上でローカルに実行され、stdio 経由で通信します。Mailgun は現在、このサーバーのホスト版を提供していません。
機能
- メッセージング — メールの送信、保存済みメッセージの取得、メッセージの再送信
- ドメイン — ドメインの詳細表示、DNS 設定の検証、トラッキング設定(クリック、開封、配信停止)の管理
- Webhook — イベント Webhook の一覧表示、作成、更新
- ルート — 受信メールのルーティングルールの表示と更新
- メーリングリスト — メーリングリストとそのメンバーの作成、表示、更新
- テンプレート — バージョン管理付きメールテンプレートの作成、表示、更新
- 分析 — 送信指標、使用状況指標、ログの照会
- 統計 — ドメイン、タグ、プロバイダー、デバイス、国別の集計統計の表示
- 抑制リスト — バウンス、配信停止、苦情、許可リスト項目の表示
- IP と IP プール — IP の割り当てと専用 IP プール設定の表示
- バウンス分類 — バウンスの種類と配信上の問題の分析
- 検証 — 送信前にメールアドレスの配信可能性と構文を検証(
validate) - 最適化(受信トレイへの配置) — 配信可能性を評価するため、受信トレイへの配置テスト/シードテストの結果を取得(
optimize) - 検査(メールプレビュー) — 各種クライアントでのメールのレンダリングとプレビューテストの結果を取得(
inspect) - アカウント制限 — カスタムの月間送信制限を表示
上記のラベル(validate、optimize、inspect)は、タグフィルタリングで使用される製品タグです。それ以外のすべての機能は send タグに登録され、send.<group> 個のツールセットに分割されています。
[!NOTE] ツールで実行できるのは読み取りと更新の操作に限られます。削除操作は公開されていないため、意図しない操作による影響範囲を小さく抑えられます。セキュリティに関する考慮事項を参照してください。
仕組み
このサーバーは OpenAPI 駆動です。起動時に同梱の Mailgun OpenAPI 仕様を解析し、厳選された許可リスト内のエンドポイントを MCP ツールとして登録します。各ツールの入力スキーマは、仕様から Zod を使って生成されます。すべてのツールには、Mailgun の製品タグ(send、validate、optimize、または inspect)、所属するツールセット、データの読み取りのみを行うかどうかが注釈されています。
デフォルトでは、起動時にすべてのツールが読み込まれます。--tags dynamic を指定すると、少数のコアツールと、モデルが必要に応じて追加のツールセットを読み込むための3つのツールが読み込まれます。これにより、モデルに送信されるツール定義を小さく保てます。タグフィルタリングでは、代わりに起動時に固定のツールセットを読み込むため、特定のワークフローで必要な製品だけを公開できます。
前提条件
- Node.js (v20.12 以降)
- Mailgun アカウントと API キー
インストール
このサーバーは npm に @mailgun/mcp-server として公開されており、stdio 経由で実行されます。ほとんどのクライアントでは npx を使って必要に応じて起動できるため、グローバルにインストールする必要はありません。以下の各スニペットでは、YOUR-mailgun-api-key をMailgun API のセキュリティ設定で取得したキーに置き換えてください。
[!TIP] アカウントが Mailgun の EU リージョンでホストされている場合は、
envブロックに"MAILGUN_API_REGION": "eu"を追加してください(または CLI で-e MAILGUN_API_REGION=euを指定してください)。デフォルトはusです。
Claude Code
claude mcp add mailgun -e MAILGUN_API_KEY=YOUR-mailgun-api-key -- npx -y @mailgun/mcp-server
次に、Claude Code で /mcp を実行し、mailgun サーバーが接続されていることを確認します。
Claude Desktop
Settings → Developer → Edit Config を開くか、ファイルを直接編集します。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"mailgun": {
"command": "npx",
"args": ["-y", "@mailgun/mcp-server"],
"env": {
"MAILGUN_API_KEY": "YOUR-mailgun-api-key",
"MAILGUN_API_REGION": "us"
}
}
}
}
Cursor
コマンドパレットを開き、Cursor Settings → MCP → Add new global MCP server を選択して、次を追加します。
{
"mcpServers": {
"mailgun": {
"command": "npx",
"args": ["-y", "@mailgun/mcp-server"],
"env": {
"MAILGUN_API_KEY": "YOUR-mailgun-api-key"
}
}
}
}
Codex
codex mcp add mailgun \
--env MAILGUN_API_KEY=YOUR-mailgun-api-key \
-- npx -y @mailgun/mcp-server
VS Code (GitHub Copilot)
settings.json に次の内容を追加します。
{
"mcp": {
"servers": {
"mailgun": {
"command": "npx",
"args": ["-y", "@mailgun/mcp-server"],
"env": {
"MAILGUN_API_KEY": "YOUR-mailgun-api-key"
}
}
}
}
}
Windsurf
{
"mcpServers": {
"mailgun": {
"command": "npx",
"args": ["-y", "@mailgun/mcp-server"],
"env": {
"MAILGUN_API_KEY": "YOUR-mailgun-api-key"
}
}
}
}
Gemini CLI
~/.gemini/settings.json に追加します。
{
"mcpServers": {
"mailgun": {
"command": "npx",
"args": ["-y", "@mailgun/mcp-server"],
"env": {
"MAILGUN_API_KEY": "YOUR-mailgun-api-key"
}
}
}
}
設定
環境変数
| 変数 | 必須 | デフォルト | 説明 |
|---|---|---|---|
MAILGUN_API_KEY | はい | — | Mailgun API キー |
MAILGUN_API_REGION | いいえ | us | API リージョン: us または eu |
MAILGUN_API_HOSTNAME | いいえ | (リージョンから導出) | API ホスト名を上書きします(例: api.eu.mailgun.net)。リージョンより優先されます。 |
MAILGUN_MCP_TAGS | いいえ | (すべて) | 読み込むタグまたはツールセットをカンマ区切りで指定します。または dynamic を指定すると、コアツールと必要に応じて読み込む追加ツールを使用します。--tags と同等です。CLI フラグが優先されます。 |
CLI オプション
クライアントの args で、パッケージ名の後にフラグを指定します(例: ["-y", "@mailgun/mcp-server", "--tags", "validate,inspect"])。
| フラグ | 説明 |
|---|---|
--tags <list> | 読み込むタグまたはツールセットをカンマ区切りで指定します(デフォルト: すべて)。有効な値: all、dynamic、core、send、validate、optimize、inspect、および send.<group> ツールセット。 |
--list-tags | 有効な --tags の値を説明付きですべて表示して終了します。 |
--help、-h | 使用方法を表示して終了します。 |
必要に応じたツールセットの読み込み
--tags dynamic(または MAILGUN_MCP_TAGS=dynamic)を指定すると、サーバーは次のコアツールを読み込んで起動します。
| ツール | 用途 |
|---|---|
post-v3-domain-messages | メールを送信する |
get-v4-domains | ドメインを一覧表示する |
get-v4-domains-name | ドメインの詳細と DNS レコードを表示する |
put-v4-domains-name-verify | ドメインの DNS レコードを再確認する |
get-v3-domains-name-tracking | トラッキング設定を表示する |
get_metrics_summary | 主要な送信指標の概要を表示する |
post-v1-analytics-metrics | アカウント指標を照会する |
post-v1-analytics-logs | イベントログを照会する |
post-v2-bounce-classification-metrics | バウンス分類指標を表示する |
get-v3-domain-bounces | バウンスを一覧表示する |
get-v3-domain-bounces-address | バウンスレコードを検索する |
get-v3-domain-unsubscribes | 配信停止を一覧表示する |
get-v3-domain-complaints | 苦情を一覧表示する |
get-v3-domain-templates | テンプレートを一覧表示する |
validate_email | メールアドレスを検証する |
すべてのツールは、いずれかのツールセットに属します。タスクに応じて、モデルが残りのツールセットを読み込みます。
| ツールセット | ツール数 | 内容 |
|---|---|---|
send.messages | 3 | メールの送信、保存済みメッセージの取得と再送信 |
send.domains | 8 | ドメイン、DNS 検証、送信キュー、トラッキング設定 |
send.webhooks | 4 | ドメインの Webhook |
send.account | 8 | アカウントの IP、専用 IP プール、カスタム送信制限 |
send.message_tags | 8 | メッセージタグ、タグ別統計、タグ制限 |
send.analytics | 12 | 統計と集計、分析指標とログ、バウンス分類 |
send.suppressions | 8 | バウンス、配信停止、苦情、許可リスト |
send.routes | 3 | 受信ルート |
send.lists | 8 | メーリングリストとメンバー |
send.templates | 8 | テンプレートとテンプレートのバージョン |
validate | 1 | メールアドレスの検証 |
optimize | 1 | 受信トレイへの配置テスト結果 |
inspect | 1 | メールプレビューテストの結果 |
モデルは、次の3つの追加ツールを使ってツールセットを読み込みます。
mailgun_list_toolsetsはすべてのツールセットとそのツールを一覧表示し、読み込み済みのものとデータを変更するものを示します。ツール名を指定すると、代わりにそのツールの入力スキーマを返します。mailgun_enable_toolsetは1つ以上のツールセットを読み込みます。その後、サーバーはツール一覧が変更されたことをクライアントに通知し(notifications/tools/list_changed)、新しいツールがコアツールとともに表示されます。応答には新しいツールが入力スキーマなしで一覧表示されます。入力スキーマは、更新されたツール一覧とともに提供されます。mailgun_call_toolは、ツールセットが読み込まれているかどうかにかかわらず、名前を指定して読み取り専用ツールを実行します。これは、変更後にツール一覧を更新しないクライアント向けの代替手段です。コアツールとデータを変更するツールは実行できないため、これらは常に個別のツール呼び出しとして実行されます。
読み込まれたツールセットは、クライアントが切断するまで有効です。必要に応じた読み込みには、サーバーから変更の通知を受けたときにツール一覧を更新するクライアントが必要です。Claude Code はこれに対応しています。対応していないクライアントでは、新しく読み込まれたツールは表示されません。読み取り専用ツールは引き続き mailgun_call_tool 経由で使用できますが、データを変更するツールを使うには、デフォルト(すべてのツール)または--tags(例: --tags core,send.templates)が必要です。
タグフィルタリング
--tags または MAILGUN_MCP_TAGS に dynamic 以外の値を設定すると、読み込み用ツールを含めず、一致するツールだけを起動時に読み込みます。これを使うと、モデルに表示するツールを絞り込めます(たとえば、メールを送信しないワークフローでは検証ツールだけを読み込みます)。
有効な値(説明を確認するには --list-tags を実行してください):
all— すべてのツール(デフォルト)dynamic— コアツールと、必要に応じて読み込むその他のツールセット。単独で使用してください。他の値と組み合わせると起動時にエラーになります。core— 上記のコアツールのみsend、validate、optimize、inspect— 該当する製品のすべてのツール(sendはすべてのsend.<group>ツールセットを対象とします)send.templatesなどのツールセット ID
フィルタリングにはOR セマンティクスが適用されます。リスト内のいずれかの値に一致するツールが読み込まれます。たとえば、core,send.templates はコアツールに加えて、すべてのテンプレートツールを読み込みます。
CLI フラグを使用する場合 — MCP クライアント設定の args に --tags を指定します。
{
"mcpServers": {
"mailgun": {
"command": "npx",
"args": ["-y", "@mailgun/mcp-server", "--tags", "validate,inspect"],
"env": {
"MAILGUN_API_KEY": "YOUR-mailgun-api-key"
}
}
}
}
環境変数を使用する場合 — MAILGUN_MCP_TAGS を設定します(両方が指定されている場合は CLI フラグが優先されます)。
"env": {
"MAILGUN_API_KEY": "YOUR-mailgun-api-key",
"MAILGUN_MCP_TAGS": "validate,inspect"
}
[!TIP] バイナリを
--list-tags付きで実行すると有効な値をすべて表示できます。また、--helpを指定すると使用方法全体を表示できます。不明な値が指定された場合は、明確なエラーメッセージとともに起動時に拒否されます。
サンプルプロンプト
メールを送信する
Can you send an email to EMAIL_HERE with a funny email body that makes it sound
like it's from the IT Desk from Office Space? Please use the sending domain
DOMAIN_HERE, and make the email from "postmaster@DOMAIN_HERE"!
[!NOTE] データを送信するツールの呼び出しには、有料プランが必要なMCPクライアントもあります。送信が失敗しても何も表示されない場合は、クライアントのプランを確認してください。
送信統計を取得して可視化する
Would you be able to make a chart with email delivery statistics for the past week?
テンプレートを管理する
Create a welcome email template for new signups on my domain DOMAIN_HERE.
Include a personalized greeting and a call-to-action button.
配信状況を調査する
Can you check the bounce classification stats for my account and tell me
what the most common bounce reasons are?
DNSをトラブルシューティングする
Check the DNS verification status for my domain DOMAIN_HERE and tell me
if anything needs fixing.
抑制リストを確認する
Are there any unsubscribes or complaints for DOMAIN_HERE? Summarize the
top offenders.
ルーティングルールを管理する
List all my inbound routes and explain what each one does.
メーリングリストを作成する
Create a mailing list called announcements@DOMAIN_HERE and add these
members: alice@example.com, bob@example.com.
ドメインを比較する
Compare my sending volume and delivery rates across all my domains for
the past month.
地域別のエンゲージメント
Break down my email engagement by country and device for DOMAIN_HERE.
トラッキング設定を確認する
List all my domains and show which ones have tracking enabled for clicks
and opens.
メールアドレスを検証する
Validate the email address EMAIL_HERE and tell me whether it's safe to send to.
受信トレイへの配置を確認する(Optimize)
Pull the inbox placement results for seed test RESULT_ID_HERE and summarize
where my message landed (inbox, spam, or missing) by provider.
メールをプレビューする(Inspect)
Get the email preview results for test TEST_ID_HERE and tell me if the email
renders correctly across clients.
開発
ソースから実行する
サーバーはTypeScriptで記述されています。クローン、インストール、ビルド、テストを行います。
git clone https://github.com/mailgun/mailgun-mcp-server.git
cd mailgun-mcp-server
npm install
npm run build
npm test
npm run build は src/ を dist/ にコンパイルし、バンドルされたOpenAPI仕様をコピーします。npx ではなく、ビルド済みのエントリーポイントをMCPクライアントに指定してください(絶対パスを使用します)。
{
"mcpServers": {
"mailgun": {
"command": "node",
"args": ["/absolute/path/to/mailgun-mcp-server/dist/mailgun-mcp.js"],
"env": {
"MAILGUN_API_KEY": "YOUR-mailgun-api-key"
}
}
}
}
編集中のライブテスト
MCPサーバーは長時間実行されるstdioプロセスであり、ホットリロードには対応していません。そのため、保存時に再ビルドし、変更を反映するためにクライアントを再接続する流れになります。
-
npm run buildを一度実行して、dist/openapi.yamlを配置します。 -
TypeScriptコンパイラーを起動したままにして、保存のたびに
dist/を再ビルドします。npx tsc --watch -
別のMCPクライアント(または下記のMCP Inspector)で
dist/mailgun-mcp.jsを指定します。変更後は、MCPクライアントのセッションを再起動して新しいビルドを読み込みます。
MCP Inspectorでテストする
MCP Inspectorを使うと、完全なクライアントを用意せずにツールを試せます。まずビルドし、その後、ビルド済みサーバーを指定して起動します。
npm run build
MAILGUN_API_KEY=YOUR-mailgun-api-key npx @modelcontextprotocol/inspector node dist/mailgun-mcp.js
InspectorのUIを開き、Connectをクリックしてから、List Toolsを使ってサーバーが動作していることを確認します。ツールセットを絞り込んでテストするには、サーバーパスの後にフラグを追加します。
MAILGUN_API_KEY=YOUR-mailgun-api-key npx @modelcontextprotocol/inspector node dist/mailgun-mcp.js --tags validate,inspect
コミット前フック
npm install は、ステージされたTypeScript/JavaScriptファイルに対して oxlint --fix と oxfmt を実行し、さらに npm run check:versions を実行するgitのコミット前フック(husky経由)をインストールします。修正可能な問題は自動修正され、再度ステージされます。修正できないlintエラーやバージョン同期の不一致を含むコミットは拒否されます。この変更より前にローカルクローンを作成していた場合は、フックをインストールするために npm install を一度実行してください。
エンドポイントの追加に関する注意
エンドポイントは endpointGroups 内でツールセットごとにグループ化されています。単純な文字列のエントリでは、ツールセットから製品タグが取得され(send.templates → send)、GET の場合にのみ読み取り専用として扱われます。オブジェクト形式の EndpointEntry を使うと、ツール名を設定したり、ツールを core(動的モードで起動時に読み込み)として指定したり、データを照会するだけの POST を readOnly: true として指定したりできます。
セキュリティに関する考慮事項
APIキーの分離
Mailgun APIキーは環境変数として渡され、AIモデル自体に公開されることはありません。認証に使用するのはMCPサーバープロセスのみです。サーバーはAPIキー、リクエストパラメーター、レスポンスデータをログに記録しません。
ローカル実行
サーバーはお使いのマシン上でローカルに実行されます。Mailgun APIとの通信はすべてHTTPS経由で行われ、TLS証明書の検証が必須です。Mailgun API以外のサードパーティサービスにデータが送信されることはありません。
APIキーの権限
必要な操作のみに権限を限定した専用のMailgun APIキーを使用してください。サーバーは読み取り操作と更新操作を公開しますが、削除操作は公開しないため、意図しない操作による影響範囲を抑えられます。
レート制限
サーバーはクライアント側のレート制限を実装していません。AIからの各ツール呼び出しは、そのままMailgun APIリクエストに変換されます。サーバーは不正利用の防止をMailgun側のレート制限に依存しており、制限を超えたリクエストはAIアシスタントにエラーを返します。
プロンプトインジェクション
他のMCPサーバーと同様に、巧妙に作られたプロンプトや敵対的なプロンプトによって、AIアシスタントが意図していない操作を呼び出すよう誘導される可能性があります。たとえば、トラッキング設定の変更やメーリングリストのメンバーの読み取りなどです。特に信頼できないプロンプトを扱う場合は、操作を承認する前にAIアシスタントのツール呼び出し確認をよく確認してください。
ツールの読み込みと承認
すべてのツールにはMCPの readOnlyHint アノテーションが付いているため、クライアントはデータを読み取るだけのツールと、データを変更するツールを区別できます(たとえば、承認を求める場合)。mailgun_list_toolsets と mailgun_call_tool は読み取り専用です。mailgun_enable_toolset はセッションに表示されるツールを変更するため、読み取り専用としてマークされていませんが、Mailgun上のデータを変更することはありません。mailgun_call_tool はコアセットに含まれない読み取り専用ツールのみを実行するため、承認してもメールの送信やアカウント設定の変更は行われません。データを変更するツールは、常に個別のツール呼び出しとして実行されます。
ツールセットを必要に応じて読み込むことで、モデルに表示される情報を減らせます。ただし、モデルは任意のツールセットを読み込めるため、これはアクセス制御ではありません。サーバーが公開するツール自体を制限するには、--tagsを使用してください。
Webhook URL
Webhookの作成および更新操作では、AIアシスタントから任意のURLを指定できます。MCPサーバーは追加の検証を行わずに、これらのURLをMailgun APIに渡します。Webhookの送信先の検証はMailgunが行います。AIアシスタントがWebhook URLに意図しない内部アドレスや機密性の高いアドレスを設定しないようにしてください。
入力検証
すべてのツールパラメーターは、Zodスキーマを使ってMailgun OpenAPI仕様に照らして検証されます。ただし、検証の精度はOpenAPI仕様の正確さに依存し、一部の特殊なパラメーターでは許容範囲の広い検証にフォールバックする場合があります。追加の保護層として、Mailgun APIも独自にサーバー側の検証を行います。
デバッグ
MCPサーバーはstdio経由で通信します。トラブルシューティングについては、MCP Debugging Guideを参照してください。
ライセンス
Apache 2.0 — 詳細はLICENSEを参照してください。
コントリビューション
コントリビューションを歓迎します。Pull Requestの送信やIssueの作成をぜひご検討ください。