SpamTitan について
SpamTitan は、AI アシスタントや MCP クライアントから SpamTitan のメールセキュリティを管理する MCP サーバーです。隔離メール、リスト、統計に加え、操作可能な読み取り専用カードを提供します。
主な機能
- 01隔離メールの管理
- 02許可リストとブロックリストの管理
- 03メールフィルタリング統計の確認
- 04操作可能なメッセージカードの表示
活用シーン
- 01隔離メールの確認と処理
- 02許可・ブロックリストの更新
- 03メールフィルタリング状況の確認
MCP 対応
SpamTitan の隔離メール、リスト管理、統計機能を MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e SPAMTITAN_API_URL -e SPAMTITAN_API_KEY -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-ai/spamtitan-mcp:v1.3.4SPAMTITAN_API_URLSpamTitan API base URL (e.g. https://spamtitan.example.com/api)SPAMTITAN_API_KEYシークレットSpamTitan API key for authenticationMCP_TRANSPORTTransport mode for the server. Set to 'stdio' for local CLI use; the image defaults to 'http' for gateway hosting.AUTH_MODEシークレットCredential source: 'env' reads vars locally, 'gateway' expects header injection from the WYRE MCP Gateway.LOG_LEVELLog verbosity: debug, info, warn, errorローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/wyre-ai/spamtitan-mcp:v1.3.4stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
SpamTitan MCP サーバー
SpamTitan のメールセキュリティ向け Model Context Protocol(MCP)サーバーです。AI アシスタントが隔離メールを管理し、許可リストとブロックリストを維持し、メールフィルタリングの統計情報を確認できるようにします。
これは、Claude(または MCP 対応の任意の AI)を SpamTitan 環境に接続する Model Context Protocol(MCP) サーバーです。
MSP Claude Plugins エコシステムの一部 — MSP スタック向けの AI 連携機能を拡充するスイートです。MSP が MSP のために構築しています。
インストール
npm install @wyre-ai/spamtitan-mcp
設定
.env.example をコピーし、以下の変数を設定します。
| 変数 | 必須 | 説明 |
|---|---|---|
SPAMTITAN_API_KEY | stdio および AUTH_MODE=env の場合 | SpamTitan API キー |
SPAMTITAN_BASE_URL | いいえ | パスプレフィックスを含む SpamTitan インスタンスの URL(例:https://mail.example.com/spamtitan/)。デフォルトは https://api-spamtitan.titanhq.com です。ゲートウェイモードでは、リクエストごとの X-SpamTitan-Base-URL ヘッダーが優先されます。 |
MCP_TRANSPORT | いいえ | stdio(デフォルト)または http |
AUTH_MODE | いいえ | gateway(Docker イメージおよび Compose)または env。ゲートウェイモードでは、各 /mcp リクエストに X-SpamTitan-API-Key が必要で、SPAMTITAN_API_KEY へのフォールバックは行いません。env は S2S 認証の成功後にのみこの変数を使用します。未設定の場合は env になります(stdio およびシングルテナント HTTP)。 |
CONDUIT_S2S_SECRET | HTTP の場合は必須 | サービス間共有シークレット。この値が空、または既知のプレースホルダー(changeme、secret、replace-me、your-s2s-secret、replace-with-a-real-secret、その他のサンプル値)の場合、HTTP サーバーはエラーをログに記録し、ゼロ以外の終了コードで終了します。openssl rand -hex 32 で生成してください。設定しないと Compose は起動しません。この値がログに記録されることはありません。 |
MCP_ALLOW_INSECURE_DEV | いいえ | CONDUIT_S2S_SECRET なしで HTTP を起動する場合に限り、ローカル開発用として 1 に設定します。プロセスは警告をログに記録し、X-Gateway-S2S の検証を行わず、127.0.0.1 のみで待ち受けます。ループバック以外の MCP_HTTP_HOST を指定すると起動を拒否します。既知のプレースホルダーシークレットを指定した場合も起動を拒否します。 |
MCP_HTTP_HOST | いいえ | 実際の CONDUIT_S2S_SECRET が設定されている場合のバインドアドレス。未設定の場合は、従来のコンテナーのバインド先である 0.0.0.0 が維持されます。イメージおよび Compose は、コンテナー内で 0.0.0.0 を設定します。 |
MCP_HTTP_PORT | いいえ | HTTP ポート。デフォルトは 8080 です。 |
/health と /healthz は認証不要のままで、認証情報を読み取りません。stdio トランスポートでは CONDUIT_S2S_SECRET を使用しません。
HTTP 認証
MCP_TRANSPORT=http で CONDUIT_S2S_SECRET が設定されている場合、すべての /mcp リクエストに X-Gateway-S2S を含める必要があります。検証処理は src/s2s-verify.ts の verifyS2sHeader です。ヘッダー値は t=<unix seconds>,v1=<hex> 形式で、hex は CONDUIT_S2S_SECRET をキーとして、文字列 t=<unix seconds> をそのまま HMAC-SHA256 でハッシュ化した値(小文字の 16 進数 64 文字)です。タイムスタンプはサーバーの時計から 300 秒以内でなければなりません。ヘッダーがない場合、または無効な場合は、ベンダーの認証情報を読み取る前に HTTP 401 を返します。
TS=$(date +%s)
SIG=$(printf 't=%s' "$TS" | openssl dgst -sha256 -hmac "$CONDUIT_S2S_SECRET" -hex | awk '{print $NF}')
curl -sS http://127.0.0.1:8080/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H "X-Gateway-S2S: t=${TS},v1=${SIG}" \
-H "X-SpamTitan-API-Key: $SPAMTITAN_API_KEY" \
-H "X-SpamTitan-Base-URL: $SPAMTITAN_BASE_URL" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
AUTH_MODE=gateway の場合、/mcp には X-SpamTitan-API-Key も必要です。このヘッダーのみがリクエストの API キーとして使用されます。X-SpamTitan-Base-URL は任意で、指定するとテナントのインスタンスを選択します。AUTH_MODE=env でも署名付きの X-Gateway-S2S ヘッダーは必要です。その後、環境変数の SPAMTITAN_API_KEY と SPAMTITAN_BASE_URL が使用されます。
使用方法
Claude Desktop で実行する
Claude Desktop の claude_desktop_config.json に追加します。
{
"mcpServers": {
"spamtitan-mcp": {
"command": "npx",
"args": ["@wyre-ai/spamtitan-mcp"],
"env": {
"SPAMTITAN_API_KEY": "your-spamtitan-api-key"
}
}
}
}
Claude Code(CLI)で実行する
claude mcp add spamtitan-mcp \
-e SPAMTITAN_API_KEY=your-value \
-- npx -y @wyre-ai/spamtitan-mcp
Docker
イメージはコンテナ内で 0.0.0.0(MCP_HTTP_HOST)をリッスンし、デフォルトで AUTH_MODE=gateway に設定されています。ポートをループバックに公開し、有効な S2S シークレットを渡してください。ゲートウェイモードでは、SpamTitan の認証情報はリクエストごとにヘッダーとして渡されます。API キーは環境変数から読み込まれません。
docker build -t spamtitan-mcp .
docker run \
-e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
-p 127.0.0.1:8080:8080 \
spamtitan-mcp
CONDUIT_S2S_SECRET が未設定または空の場合、Compose は起動を拒否します。ゲートウェイサービスは AUTH_MODE=gateway を設定し、SPAMTITAN_API_KEY や SPAMTITAN_BASE_URL を注入せず、127.0.0.1:8080:8080 を公開します。
CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" docker compose up
シングルテナント HTTP(AUTH_MODE=env)でも S2S シークレットが必要で、その後 SPAMTITAN_API_KEY と SPAMTITAN_BASE_URL を使用します。これは上記のゲートウェイ Compose サービスとは別のものです。
docker run \
-e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
-e AUTH_MODE=env \
-e SPAMTITAN_API_KEY=your-value \
-e SPAMTITAN_BASE_URL=https://mail.example.com/spamtitan/ \
-p 127.0.0.1:8080:8080 \
spamtitan-mcp
シークレットなしのローカル HTTP は、開発専用です。127.0.0.1 にバインドし、警告をログに記録します。ループバック以外の MCP_HTTP_HOST(イメージのデフォルトである 0.0.0.0 を含む)を指定すると、起動時に終了します。
MCP_TRANSPORT=http MCP_HTTP_HOST=127.0.0.1 MCP_ALLOW_INSECURE_DEV=1 npm start
利用可能なドメイン
リスト
許可リストとブロックリストを管理します
隔離
メールの隔離を確認、管理します
統計
メールフィルタリングの統計情報とレポート
機能
- 隔離されたメッセージのインタラクティブカード(MCP Apps、SEP-1865) —
spamtitan_get_messageは MCP Apps ホスト(Claude Desktop/web)で読み取り専用のインタラクティブカードとして表示されます。他のホストでは、プレーンな JSON の動作に変更はありません。カードはデフォルトで中立的なデザインで、window.__BRAND__の注入またはMCP_BRAND_*環境変数(MCP_BRAND_NAME、MCP_BRAND_LOGO_URL、MCP_BRAND_PRIMARY_COLOR、MCP_BRAND_ACCENT_COLOR、MCP_BRAND_BG、MCP_BRAND_TEXT)でブランド設定できます。再ビルドは不要です。ui/の編集後にnpm run build:uiを実行してカードバンドルを再ビルドしてください。
開発
# Clone the repository
git clone https://github.com/WYRE-AI/spamtitan-mcp.git
cd spamtitan-mcp
# Install dependencies
npm install
# Build
npm run build
# Run tests
npm test
# HTTP refuses to start until CONDUIT_S2S_SECRET is a real secret
MCP_TRANSPORT=http CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" npm start
# Local HTTP only, without a service-to-service secret (binds 127.0.0.1)
MCP_TRANSPORT=http MCP_HTTP_HOST=127.0.0.1 MCP_ALLOW_INSECURE_DEV=1 npm start
貢献
貢献を歓迎します!CONTRIBUTING.md がある場合はご確認ください。または、変更について話し合うために issue を作成してください。
ライセンス
Apache License, Version 2.0 の下でライセンスされています。詳細は LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。