mailchimp-mcp-server について
mailchimp-mcp-serverは、MCPクライアントからMailchimpのキャンペーン、オーディエンス、購読者を管理するサーバーです。送信確認ゲートと送信後レポートを備えています。
主な機能
- 01キャンペーンの下書き、テスト、送信、予約
- 02オーディエンスと購読者レコードの管理
- 03セグメントとマージフィールドの作成・更新
- 04キャンペーンレポートと反応の確認
- 05任意のローカル素材・テンプレート利用
活用シーン
- 01ニュースレターの送信前準備とテスト
- 02購読者のインポートや更新
- 03クリック、開封、配信停止の確認
- 04ローカルテンプレートでキャンペーンを作成
MCP 対応
MCPツール、リソース、ニュースレター用プロンプトを通じて、Mailchimpのアカウント、オーディエンス、購読者、キャンペーン、テンプレート、レポートを操作できます。STDIOとStreamable HTTPに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @cyanheads/mailchimp-mcp-serverMAILCHIMP_API_KEYシークレットMailchimp Marketing API key, including the '-dc' data-center suffix (e.g. 'abc...-us22'). Generate at Mailchimp → Account → Extras → API keys.MAILCHIMP_BASE_URLOverride the API base URL (for mock servers or testing). Defaults to 'https://{dc}.api.mailchimp.com/3.0' derived from the API key suffix.MAILCHIMP_TIMEOUT_MSPer-request timeout in milliseconds.MAILCHIMP_MAX_RETRIESMax retry attempts for transient upstream failures (0-10).MAILCHIMP_CONCURRENCY_LIMITMax in-flight upstream requests across this process (1-10).MAILCHIMP_ASSETS_DIRAbsolute path to a local assets directory. When set (Node-only — Workers ignored), enables the `mailchimp_assets` tool and auto-uploads `@assets/<path>` references in campaign HTML to Mailchimp File Manager at send time. Cache at <dir>/.mailchimp-cache.json.MAILCHIMP_TEMPLATES_DIRAbsolute path to a local templates directory. When set (Node-only), enables the `mailchimp_local_templates` tool and support for `content.localTemplate` on campaign tools. Templates are `.eta` files with optional YAML frontmatter; legacy `<name>.meta.yaml` sidecars are read when frontmatter is absent. Canonical write path on free-tier Mailchimp.MCP_LOG_LEVELMinimum log level for output: debug, info, notice, warning, or error.MCP_TRANSPORT_TYPESelects the HTTP transport.MCP_HTTP_HOSTThe hostname for the HTTP server.MCP_HTTP_PORTThe port to run the HTTP server on.MCP_HTTP_ENDPOINT_PATHThe endpoint path for the MCP server.MCP_AUTH_MODEシークレットAuthentication mode to use: 'none', 'jwt', or 'oauth'.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
@cyanheads/mailchimp-mcp-server
MCP クライアントから Mailchimp キャンペーンの下書き作成、テスト、送信を直接行えます。オーディエンス管理、購読者の CRUD、送信後の分析機能を備え、送信はデフォルトで安全なゲートによって制御されます。STDIO または Streamable HTTP に対応しています。
概要
Mailchimp のキャンペーン管理。メールキャンペーンの下書き作成、テスト、送信、オーディエンスや購読者の管理、送信後の分析の確認ができます。作成時に使用する画像やテンプレートを格納するローカルディレクトリも、必要に応じて設定できます。
ツール
| ツール | 説明 |
|---|---|
mailchimp_account | アカウントのプロフィール、プラン、データセンター、Chimp Chatter のアクティビティフィード |
mailchimp_audiences | オーディエンス(リスト)の読み取り、作成、更新。オーディエンスごとの分析と登録フォームの設定にも対応 |
mailchimp_audience_overview | 1 回の呼び出しでオーディエンスの概要を取得:情報、統計、成長履歴、メールクライアント上位、マージフィールドのスキーマ |
mailchimp_subscribers | 登録者の読み取り、更新、アーカイブ、タグ、メモ、エンゲージメント履歴 |
mailchimp_upsert_subscriber | ステータス、マージフィールド、タグ、メモを指定して、1 人の登録者を冪等に追加または更新 |
mailchimp_find_subscriber | 1 つのオーディエンス内、またはアカウント全体からメールアドレスで登録者を検索 |
mailchimp_import_subscribers | 1 回の呼び出しにつき最大 500 人の登録者を一括追加または更新。デフォルトは pending |
mailchimp_segments | セグメントの CRUD(保存済み、静的、ファジー)、メンバーの一覧表示、一括追加・削除 |
mailchimp_merge_fields | 登録者のカスタム属性の読み取り、作成、更新 |
mailchimp_campaigns | キャンペーンの記録、コンテンツ、送信チェックリスト、RSS/再送の制御 |
mailchimp_send_campaign | 1 回の呼び出しでキャンペーンを作成し、下書きとして保存、テスト、送信、またはスケジュール設定 |
mailchimp_replicate_campaign | 上書き設定を適用してキャンペーンを複製し、下書き、テスト、送信、またはスケジュール設定 |
mailchimp_reports | キャンペーンレポート:一覧、個別レポート、または 10 種類のレポート指標のいずれか |
mailchimp_campaign_report | 送信後の概要:主要指標、上位リンク、地域、配信停止 |
mailchimp_templates | Mailchimp ホストのテンプレート。無料プランでは読み取り可能、有料プランでは書き込み可能 |
mailchimp_files | Mailchimp の CDN 上でのファイルマネージャーへのアップロード、一覧表示、名前変更、削除 |
mailchimp_search | アカウント全体からメンバーまたはキャンペーンを検索 |
mailchimp_assets (条件付き:MAILCHIMP_ASSETS_DIR) | キャンペーン HTML 内の @assets/<path> 参照に使うアップロードを確認し、事前にウォームアップ |
mailchimp_local_templates (条件付き:MAILCHIMP_TEMPLATES_DIR) | ローカルの .eta テンプレートを作成・レンダリング。無料プランでのテンプレート書き込み方法 |
mailchimp_playbook | ライブアカウントの状態と統合した手順プレイブック。アドバイスのみ |
リソース
| リソース | 説明 |
|---|---|
mailchimp://account | アカウントのスナップショット:プロフィール、プラン、データセンター、登録者総数 |
mailchimp://audiences/{audienceId} | オーディエンスのスナップショット:名前、連絡先、統計、ダブルオプトインの状態 |
mailchimp://campaigns/{campaignId} | キャンペーンのスナップショット:ステータス、設定、受信者 |
mailchimp://campaigns/{campaignId}/report | キャンペーンの送信後の主要指標 |
リソースのデータはすべてツールからも取得できます。オーディエンスとキャンペーンは各ツールの list 操作で一覧表示できます。
プロンプト
| プロンプト | 説明 |
|---|---|
newsletter_from_source | URL または概要から編集者向けニュースレターを作成し、下書き、テスト、送信の手順に沿って進めます |
デザインの参考資料:docs/email-design-playbook.md。
機能リファレンス
mailchimp_account tool
operation: infoはプロフィール、プラン、データセンター、登録者総数、業界ベンチマークを返します。operation: activity-feedはcount(最大 100、デフォルト 20)とoffsetでページ分割された Chimp Chatter イベントを返します- アクティビティフィードが空の場合、考えられる原因を示す
noteが含まれます
mailchimp_audiences tool
- 操作:
list、get、create、update、分析情報の読み取り操作list-activity、list-growth、list-clients、list-abuse-reports、list-locations、およびget-signup-forms/customize-signup-forms(signupFormConfigを受け取ります)。listとcreate以外のすべての操作でaudienceIdが必要です createにはname、contact(company、address1、city、state、zip、country)、permissionReminder、campaignDefaults(fromName、fromEmail、language)が必要です
mailchimp_audience_overview ツール
audienceIdとgrowthMonths(1~36、デフォルトは12)を指定します。情報、統計、連絡先、キャンペーンのデフォルト設定、成長履歴、利用者数の多いメールクライアント、マージフィールドのスキーマを返しますnotes[]では、成長データまたはメールクライアントの配列が空の場合に、「まだデータがない」状態とエンゲージメントがゼロの状態を区別して説明します
mailchimp_subscribers ツール
- すべての呼び出しで
audienceIdが必要です。list(statusでフィルタリング可能)以外のすべての操作ではemailも必要です。操作はlist、get、update、archive、list-tags、set-tags、list-notes/add-note/update-note/delete-note(noteIdで指定)、list-activity/list-events/list-goalsです - アドレスの前後の空白は削除され、ローカル部またはドメイン部が欠けている場合は拒否されます。
listのemailが空の場合、フィルターは適用されません。購読を再開する際、updateでsubscribedに変更すると確認が求められます。すでに購読済みのメンバーはそのままです set-tagsは宣言的に動作します。tagsが有効なタグの完全なセットとなり、preserveTagsで指定しない限り、その他のタグはすべて削除されます(静的セグメントへの所属はタグとして保存されます)。tagsAdded、tagsRemoved、tagsActiveを返します
mailchimp_upsert_subscriber ツール
audienceId、email、statusは必須です。mergeFields、tags+preserveTags(set-tagsと同じ宣言的な同期)、note、vip、languageは任意です。updateExistingStatus: falseを指定すると、新規レコードにのみstatusが適用されますisNew、処理後のstatus、tagsAdded/tagsRemoved/tagsFinal、noteAttached、webUrlを返しますstatus: "pending"は Mailchimp のダブルオプトインフローを使用します。新規または再開時のsubscribedステータスは、書き込みを行う前に、文書化された同意の確認を求めます。確認を拒否した場合、何も書き込まれません。すでに購読済みのレコードの更新とupdateExistingStatus: falseの場合は、確認を求めず既存のステータスを維持します
mailchimp_find_subscriber ツール
emailには、メールアドレスまたは自由形式の検索フラグメントを指定できます。@を含まないフラグメントも指定できます。対象は、指定した単一のaudienceId、または省略した場合はアカウント内のすべてのオーディエンスです(searchedAcrossに反映されます)- マージフィールドと統計を含む
exactMatchesとfuzzyMatchesを返します。includeTags(デフォルトはtrue)を指定すると、各一致のタグも追加で返します(各一致につき呼び出しが1回追加されます)
mailchimp_import_subscribers ツール
- 1回の呼び出しにつき
audienceIdと1~500件のsubscribers行が必要です。statusのデフォルトはpending(ダブルオプトイン)で、行ごとのstatusで上書きできます。updateExistingのデフォルトはfalseのため、既存のレコードはスキップされます subscribedになる行がある場合、バッチ全体を書き込む前に1回確認が必要です。確認を拒否した場合、何も書き込まれません。pendingのみのインポートでは確認は不要ですtotalCreated、totalUpdated、errorCount、および各行のsucceededとfailedの項目を返します。不完全なアドレスはinvalid_emailとして失敗し、有効な行がないバッチは上流へのリクエストを行いません
mailchimp_segments ツール
- すべての呼び出しで
audienceIdが必要です。list(typeでsaved、static、fuzzyに絞り込み可能)およびcreate以外のすべての操作ではsegmentIdが必要です。create/updateではname、staticEmails、または保存済みセグメントのoptionsを指定します batch-update-membersは静的セグメントにmembersToAdd/membersToRemoveを適用し、added、removed、メールアドレスごとのerrorsを返します- 無料プランでは静的セグメントと基本的な保存済みセグメントを利用できます。高度な条件には Premium が必要で、利用できない場合は
mailchimp_forbiddenとして失敗します
mailchimp_merge_fields ツール
list、get、create、updateを利用できます。createではname、tag(最大10文字)、typeが必須です。get/updateではmergeIdを指定しますoptionsにはタイプ固有の設定を指定します。dropdown/radioにはchoices、date/birthdayにはdate_format、phoneにはphone_formatを指定します
mailchimp_campaigns ツール
- 操作:
list(status、listId、sinceSendTime/beforeSendTimeで絞り込み)、get、create(regular/plaintext/rssのtypeに加え、recipientsとsettings)、update、replicate、get-content、set-content、get-checklist、cancel-send、create-resend、pause-rss、resume-rss。listとcreate以外はすべてcampaignIdを受け取ります set-contentはhtml、plainText、templateId+templateSections、archiveContent、url、またはlocalTemplateを受け付けます(localTemplateはhtmlおよびtemplateIdと併用できません)。get-checklistはisReadyと型付きの項目を返しますget-contentはvariant: html | plainText | archiveHtml | allを受け付けます(デフォルトはall)。空の本文は省略されます- ここでは送信、テスト、スケジュール設定、削除は行いません。配信は
mailchimp_send_campaignまたはmailchimp_replicate_campaignを通じて行います
mailchimp_send_campaign ツール
audienceId、subject、fromName、replyTo、およびcontent(html、plainText、templateId、localTemplateのうち少なくとも1つ)が必須です。modeはdraft(デフォルト)、test(testEmailsが必要、最大50件)、send、またはschedule(15分以上先のscheduleTimeが必要)ですcampaignId、実際に適用されたmode、status、recipientCount、webUrl、およびブロックを伴わないchecklistWarningsを返します。draft以外では、チェックリストのブロックエラーによりpre_send_checklist_failedがスローされます。また、cleanupOnError(デフォルトはtrue)は処理途中で失敗した場合に下書きを削除しますsendとscheduleにはconfirmSend: trueが必要です。また、キャンペーン作成前に1回限りの確認プロンプトが表示されます。確認を断ると下書きが残り、cancelledByUserが設定されます。コンテンツが変更された場合や再実行時には、再度確認を求められます。上流で曖昧な失敗が発生した場合、作成は再試行されません
mailchimp_replicate_campaign ツール
sourceCampaignIdに加えて、subjectOverride、previewTextOverride、fromNameOverride、replyToOverride、titleOverride、audienceOverride、segmentOverride、contentOverrideは任意です。mode、testEmails、scheduleTime、cleanupOnErrorはmailchimp_send_campaignと同様に動作します- 新しい
campaignId、overridesApplied[]、および同じstatus、チェックリスト、cancelledByUserの各フィールドを返します sendとscheduleでは、同様にconfirmSend: trueと確認プロンプトによるゲートが必要です
mailchimp_reports ツール
list(type、sinceSendTime/beforeSendTimeで絞り込み)、get、またはcampaignIdとdimensionを指定するslice。dimensionはabuse-reports、advice、click-details(linkIdでURLを1つ指定)、open-details(subscriberHashでメンバーを1人指定)、domain-performance、eepurl、email-activity、locations、sent-to、unsubscribedですsliceはディメンションに応じた形式のrowsとtotalItemsを返します。送信履歴のないキャンペーンに対するgetはcampaign_not_sentをスローします
mailchimp_campaign_report ツール
campaignIdに加え、各スライスの行数を指定するincludeTopN(1~100、デフォルトは10)delivery(配信済み数、種類別のバウンス数、迷惑メール報告)、engagement(開封数、クリック数、配信停止数)、topClickedLinks、topLocations、recentUnsubscribes、および Mailchimp が提供する場合はindustryBenchmarksを返します。送信履歴のないキャンペーンではcampaign_not_sentをスローします
mailchimp_templates ツール
list(user/base/galleryのtype、category、folderIdで絞り込み)、get、get-default-content、create、update、delete。updateで受け付けるのはname、html、folderIdのみです。セクションごとの編集はキャンペーンのtemplateSectionsを通じて行います- 無料プランでも
baseとuserテンプレートの読み取りは可能です。書き込みとgalleryの読み取りには有料プランが必要で、利用できない場合はmailchimp_forbiddenが返されます。すべてのプランで、テンプレートの作成にはmailchimp_local_templatesを使用できます
mailchimp_files ツール
list(type、folderId、sinceCreatedAt/beforeCreatedAtでフィルタリング)、get、upload(拡張子付きのnameと base64 のfileData。data:プレフィックスは不要)、update(名前変更、またはfolderIdを指定して移動。ルートには0を指定)、delete、読み取り専用のlist-folders/get-folderを利用できます。アップロード上限は画像が 1 MB、その他のファイルが 10 MB で、.webp/.avifは受け付けられませんuploadとgetは、キャンペーン HTML に埋め込む公開 CDN URL のfullSizeUrlを返します。listはtotalFileSizeInBytesも返します
mailchimp_search ツール
scope(membersまたはcampaigns)とqueryを指定します。audienceIdでメンバー検索を絞り込み、includeTopN(1~100、デフォルトは 10)で各結果配列の上限を設定します- メンバーは
exactとfuzzyとして返され、上流のtotalExact/totalFuzzyも含まれます。キャンペーンはsnippetとtotalMatchesを含むmatchesとして返されます。結果が空の場合はnoteが含まれます
mailchimp_assets ツール
list、info(relPathを指定。sha256と、キャッシュ済みのアップロードがあればその情報を返します)、sync(送信前にキャッシュされていないファイルをアップロードし、uploaded、cached、理由付きのskippedを返します)、clear-cacheを利用できますmailchimp_send_campaign、mailchimp_replicate_campaign、またはmailchimp_campaignsのset-contentに渡すコンテンツ内の@assets/<path>参照は、ファイルマネージャーにアップロードされ、CDN URL に書き換えられます。アップロードは<assetsDir>/.mailchimp-cache.json内で SHA-256 によってキャッシュされます。サイズ超過のファイルとディレクトリ外のパスは、アップロード前に拒否されますMAILCHIMP_ASSETS_DIRが設定されている場合にのみ一覧に表示されます
mailchimp_local_templates ツール
list、get(ソースと解析済みのメタデータ)、render-preview(nameとvarsを指定。HTML を返し、送信はしません)、seed-from-mailchimp(Mailchimp テンプレートのmailchimpTemplateIdをnameとしてディスクに書き込みます)を利用できます- テンプレートは
.etaファイルで、subject、previewText、vars用の YAML フロントマターを任意で設定できます。宣言済みの変数に値が渡されない場合、レンダリングは失敗します。キャンペーンツールではcontent.localTemplateとcontent.localTemplateVarsを使ってテンプレートをレンダリングできます。この方法はhtmlおよびtemplateIdと併用できません。テンプレートの例 MAILCHIMP_TEMPLATES_DIRが設定されている場合にのみ一覧に表示されます
mailchimp_playbook ツール
topic:send、post-send-review、deliverability、list-hygiene、onboarding、subscriber-triage、またはdesign-campaign。send/list-hygiene/design-campaignにはaudienceId、post-send-reviewにはcampaignId、subscriber-triageにはemailを指定します- ライブの数値に合わせた Markdown の
instructions、liveStateスナップショット、入力値が事前入力されたnextToolSuggestionsを返します。書き込みは行いません
mailchimp://account リソース
- パラメーターはありません。プロフィール、プラン、データセンター、購読者総数、
fetchedAtを含むapplication/jsonを返します mailchimp_accountのoperation: infoと同じデータです
mailchimp://audiences/{audienceId} リソース
- 名前、連絡先、統計、キャンペーンのデフォルト設定、許可に関するリマインダー、ダブルオプトインのステータス、購読 URL を返します
audienceIdはmailchimp_audiencesのoperation: listから取得します
mailchimp://campaigns/{campaignId} リソース
- ステータス、設定、宛先、トラッキング、レポートの概要を返します
campaignIdはmailchimp_campaignsのoperation: listから取得します
mailchimp://campaigns/{campaignId}/report リソース
- 送信済みメール、バウンス、開封、クリック、配信停止、迷惑メール報告、業界統計を返します
- キャンペーンが送信されるまでは、検証エラーで失敗します
newsletter_from_source プロンプト
- 引数:
source(URL または自由形式の概要)は必須、audienceIdとseasonalContextは任意です mailchimp_playbook(topic: design-campaign)の結果を HTML の下書きにつなげ、その後mailchimp_send_campaignで下書き、テスト、送信を行う、1 つのユーザーメッセージを返します
機能
@cyanheads/mcp-ts-core を基盤としています。stdio および Streamable HTTP トランスポート、切り替え可能な認証(none / jwt / oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレースを備えた構造化ログに対応しています。
Mailchimp 固有の機能:
- キーの
-<dc>サフィックスから API ホストとデータセンターを特定する Marketing API v3 クライアント。再試行、プロセス全体に適用される同時実行数の上限(MAILCHIMP_CONCURRENCY_LIMIT)、429 発生後のクールダウンに対応しています - 送信制御:キャンペーンはデフォルトで
draftになり、send/scheduleにはconfirmSend: trueと確認プロンプトが必要です。また、新規または再開するsubscribedサブスクリプションにも確認が必要です。インポートはデフォルトでpendingになります - 取り消し不能な削除はありません:オーディエンス、マージフィールド、キャンペーンの削除、および購読者の完全削除は Mailchimp UI で行います。購読者の削除方法として最も強い操作は
archiveです - ローカルでの作成:
@assets/<path>ファイルは送信時にアップロードしてパスを書き換え、.etaテンプレートはローカルでレンダリングします。これにより、Templates API が読み取り専用の無料プランにも対応します count(最大 1000)とoffsetによるリスト操作のページネーション
エージェントに使いやすい出力:
- 空の結果の説明:空のアクティビティフィード、オーディエンスの概要、検索結果に含まれる
note/notes[]で、データがないのか、実際に件数がゼロなのかを示します - 部分的な失敗:
mailchimp_import_subscribersとmailchimp_segmentsのbatch-update-membersは、バッチ全体を失敗させるのではなく、行ごとの成功とエラーを返します - 判別可能な出力:
operation、dimension、modeで、どのフィールドに値が設定されているかを示します。isNewとcancelledByUserは実際に何が起きたかを報告します - 型付きエラー:宣言されているすべての理由(
campaign_not_sent、pre_send_checklist_failed、mailchimp_forbidden、…)に、呼び出し元が次に取るべき対応を示すヒントが付いています
はじめに
以下を MCP クライアントの設定ファイルに追加します。Mailchimp API キーの生成方法については、docs/api-key.md を参照してください。
{
"mcpServers": {
"mailchimp-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/mailchimp-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"MAILCHIMP_API_KEY": "your-key-with-dc-suffix-e.g.-us22"
}
}
}
}
または npx を使用する場合(Bun は不要です):
{
"mcpServers": {
"mailchimp-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/mailchimp-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"MAILCHIMP_API_KEY": "your-key-with-dc-suffix-e.g.-us22"
}
}
}
}
または Docker を使用する場合:
{
"mcpServers": {
"mailchimp-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-e", "MAILCHIMP_API_KEY=your-key-with-dc-suffix-e.g.-us22",
"ghcr.io/cyanheads/mailchimp-mcp-server:latest"
]
}
}
}
Streamable HTTP を使用する場合は、トランスポートを設定してサーバーを起動します:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 MAILCHIMP_API_KEY=... bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 以降(または Node.js v24 以降)。
- Mailchimp Marketing API キー。
-dcサフィックス(例:-us22)でデータセンターを識別し、起動時に解析します。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/mailchimp-mcp-server.git
- ディレクトリに移動します:
cd mailchimp-mcp-server
- 依存関係をインストールします:
bun install
- 環境を設定します:
cp .env.example .env
# edit .env and set MAILCHIMP_API_KEY
設定
| 変数 | 説明 | デフォルト |
|---|---|---|
MAILCHIMP_API_KEY | 必須。 -dc サフィックスを含むマーケティング API キー(例:abc…-us22)。 | なし |
MAILCHIMP_BASE_URL | モックサーバーやテスト用の API ベース URL の上書き値。 | https://{dc}.api.mailchimp.com/3.0 |
MAILCHIMP_TIMEOUT_MS | リクエストごとのタイムアウト(ミリ秒)。 | 60000 |
MAILCHIMP_MAX_RETRIES | 一時的な上流障害に対する再試行回数(0~10)。 | 3 |
MAILCHIMP_CONCURRENCY_LIMIT | プロセス全体で同時に処理する上流リクエストの最大数(1~10)。 | 4 |
MAILCHIMP_ASSETS_DIR | ローカルアセットディレクトリの絶対パス。mailchimp_assets と、キャンペーン HTML での @assets/<path> アップロードが有効になります。 | なし |
MAILCHIMP_TEMPLATES_DIR | ローカルテンプレートディレクトリの絶対パス。mailchimp_local_templates と、キャンペーンツールの content.localTemplate が有効になります。 | なし |
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポート。 | 3010 |
MCP_SESSION_MODE | セッションモード。確認には stateful が必要です。stateless では HTTP の起動が拒否されます(stdio には影響しません)。 | stateful |
MCP_REQUEST_STATE_KEY | 任意のシーリングキー。32 バイト以上が必要です。確認は1回限りで、単一のプロセスに紐付けられるため、再起動した場合や別のインスタンスでは再度確認を求められます。 | なし |
MCP_AUTH_MODE | 認証方式:none、jwt、または oauth。 | none |
MCP_LOG_LEVEL | ログレベル(debug、info、warning、error など)。 | info |
LOGS_DIR | ログファイルのディレクトリ(Node.js のみ)。 | <app-root>/logs |
OTEL_ENABLED | OpenTelemetry を有効にします。 | false |
OTEL_EXPORTER_OTLP_ENDPOINT | トレースとメトリクスのベース URL。 | なし |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT | OTLP ログエンドポイント。これを設定しない限り、ログのエクスポートは無効です。 | なし |
LOG_TOOL_FAILURE_PAYLOADS | 失敗した呼び出しの引数と結果を記録します。キー名による機密情報のマスキングと、LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(デフォルトは 16384)によるサイズ制限が適用されます。自由形式の値に含まれるシークレットは表示されたままです。 | false |
オプションの上書き設定の全一覧については、.env.example を参照してください。
サーバーの実行
ローカル開発
-
ウォッチモード(
MCP_TRANSPORT_TYPEでトランスポートを指定):bun run dev # stdio (default) MCP_TRANSPORT_TYPE=http bun run dev # http -
ビルドして実行:
bun run rebuild bun run start:stdio # or bun run start:http -
チェックとテストを実行:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t mailchimp-mcp-server .
docker run --rm -e MAILCHIMP_API_KEY=your-key-us22 -p 3010:3010 mailchimp-mcp-server
Dockerfile のデフォルトは HTTP トランスポート、ステートフルセッションモードで、ログは /var/log/mailchimp-mcp-server に出力されます。OpenTelemetry のピア依存関係はデフォルトでインストールされます。これらを省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。
プロジェクト構成
| ディレクトリ | 用途 |
|---|---|
src/index.ts | createApp() エントリーポイント。ツール、リソース、プロンプトを登録し、サービスを初期化します。 |
src/config | MAILCHIMP_* 環境変数の解析と、Zod による検証。 |
src/mcp-server/tools | ツール定義(*.tool.ts)と、テンプレートのレンダリング、アセットの書き換え、送信確認の共通ヘルパー。 |
src/mcp-server/resources | リソース定義(*.resource.ts)。 |
src/mcp-server/prompts | プロンプト定義(*.prompt.ts)。 |
src/services/mailchimp | Mailchimp API クライアント:HTTP、リクエストのペーシング、再試行、レスポンスの正規化。 |
src/services/assets | ローカルアセット:検出、ハッシュ化、アップロードキャッシュ、@assets/ の書き換え。 |
src/services/templates | ローカルテンプレート:Eta によるレンダリング、フロントマターの解析、Mailchimp からのシード。 |
templates/ | .eta のサンプルテンプレート。このディレクトリを指定すると試用できます。 |
docs/ | API キーのガイドとメールデザインのプレイブック。 |
tests/ | 設定、サービス、ツール、プロンプトの Vitest テストスイート。 |
開発ガイド
開発ガイドラインとアーキテクチャのルールについては、CLAUDE.md を参照してください。要点は次のとおりです。
- ハンドラーで例外をスローし、フレームワークで捕捉します。ツールのロジック内で
try/catchは使用しません - リクエスト単位のログ記録には
ctx.logを使用します - 新しいツールとリソースは、
src/mcp-server/*/definitions/index.tsのバレル経由で登録します - 外部 API 呼び出しをラップします。生データを検証し、ドメイン型に正規化してから、出力スキーマを返します。不足しているフィールドを決して捏造しないでください
コントリビューション
問題の報告を歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。