Meta Business Mcp について
Meta Business MCPは、WhatsApp Businessの自動化チームやエージェント開発者向けに、メッセージのコンプライアンス確認と配信を提供します。Metaのルールや業務ポリシーを確認し、エラー分析、テンプレート管理、非同期配信にも対応します。
主な機能
- 01送信前のコンプライアンス確認
- 02業務ポリシーと頻度制限の適用
- 03再試行付きの非同期メッセージ配信
- 04Meta APIエラーの分析
- 05テンプレートとキャンペーンの管理
活用シーン
- 01送信前にメッセージのルール適合性を確認
- 02会話状態、顧客の送信資格、配信状況の照会
- 03対象を絞ったテンプレートキャンペーンの予約
MCP 対応
stdio上のMCPを介してAIエージェントに24個のツールを公開し、メッセージ、コンプライアンス、テンプレート、会話、キャンペーンを扱います。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Meta Business MCP
Go 1.21+ License: Apache 2.0 Tests: Passing Coverage: 85.6% Tools: 24 Production-Validated
すべての AI エージェントが Meta のルールの複雑さを理解しなくても、WhatsApp Business を安全かつコンプライアンスに準拠した本番運用可能な形で利用できるようにする、WhatsApp コンプライアンスインテリジェンスプラットフォームです。
対象: AI エージェント開発者 · デジタルエージェンシー · WhatsApp 自動化チーム 21 個のツールは永久無料 · 3 個のキャンペーンツールは Pro で利用可能
目次
これが必要な理由
AI エージェントは Meta の WhatsApp Business ルール(24 時間のカスタマーケア時間、送信頻度の上限、テンプレートのカテゴリ、オプトアウトの義務、レート制限)を理解していません。メッセージを 1 件でも誤って送信すると、アカウント停止、メッセージ拒否、コンプライアンス違反につながります。Meta Business MCP は AI エージェントと Meta の API の間に位置し、すべてのルールを自動的に適用するため、エージェントがルールを覚える必要はありません。
できること
| 責務 | 説明 |
|---|---|
| コンプライアンスゲート | 送信するすべてのメッセージについて、配信前に Meta のカスタマーケア時間ルール、オプトアウトリスト、送信頻度の上限に照らして評価します。 |
| ポリシーの適用 | YAML で初期データを登録したデータベースから、カスタムビジネスポリシー(時間制限、セグメント除外、VIP タグによる上書き)を適用します。 |
| 非同期メッセージ配信 | メッセージを NATS JetStream にキューイングし、ワーカープールを通じて自動リトライと指数バックオフを用いて送信します。 |
| レート制限 | Redis Lua スクリプトを通じて、顧客ごとのトークンバケット方式のレート制限を適用します。 |
| エラーインテリジェンス | Meta API の数値エラーコードを、カテゴリ別に整理された実行可能な開発者向け指示に変換します。 |
| キャンペーン管理 | オーディエンスのセグメント化とテンプレートの検証を行いながら、キャンペーンのスケジュール設定、一時停止、キャンセルができます。 |
| テンプレートのライフサイクル管理 | ローカルにデータを保存しながら、Meta API を通じてテンプレートの作成、同期、検証を行います。 |
| MCP サーバー | Model Context Protocol を使用し、stdio 経由で AI エージェントに 24 個の構造化ツールを公開します。 |
| Webhook レシーバー | 顧客メッセージ、配信状況の更新、テンプレート承認のコールバックなど、Meta からの受信イベントを処理します。 |
クイックスタート
1. クローンして起動する
git clone https://github.com/metabusiness-mcp/meta-business-mcp.git
cd meta-business-mcp
docker compose up -d --build
すべてのコンテナが正常な状態になるまで待ちます。
docker compose ps
# All should show "healthy"
2. ダッシュボードにアクセスする
ブラウザーを開きます:http://localhost:8080
初回起動時、サーバーはランダムなパスワードを自動生成し、ターミナルに表示します。
╔══════════════════════════════════════════════════════════╗
║ DASHBOARD CREDENTIALS (auto-generated) ║
╠══════════════════════════════════════════════════════════╣
║ Username: admin ║
║ Password: a1b2c3d4e5f6g7h8 ║
╚══════════════════════════════════════════════════════════╝
パスワードをコピーしてログインします。
3. AI エージェントを接続する
MCP サーバーは stdio で動作します。AI クライアント(Claude Desktop、Cursor など)を設定します。
{
"mcpServers": {
"meta-business-mcp": {
"command": "/path/to/meta-business-mcp",
"args": []
}
}
}
4. 確認する
curl http://localhost:8080/health
# OK
起動するもの: PostgreSQL 16(:5432)、Redis 7(:6379)、NATS JetStream(:4222)、Mock Meta API(:8081)、Meta Business MCP(:8080 + MCP stdio)。デフォルトではモック認証情報が使用されるため、ローカル開発に Meta API キーは必要ありません。
MCP ツール
Model Context Protocol を使用し、stdio 経由ですべての 24 個のツールを AI エージェントに公開します。すべてのツールは本番環境で利用可能で、実際の WABA 本番環境(Meta Graph API v20.0)に対して検証済みです。
アクション操作
| ツール | 説明 | ティア | ステータス |
|---|---|---|---|
check_compliance() | 送信予定のメッセージがMetaのルールおよびローカルポリシーに準拠しているか評価します | [All] | ✅ |
send_message() | 自由形式のサービスメッセージを送信します(有効な24時間の対応ウィンドウが必要です) | [All] | ✅ |
send_template() | 承認済みのテンプレートメッセージを送信します(24時間の対応ウィンドウを回避します) | [All] | ✅ |
explain_error() | Meta APIのエラーコードを分類し、対応可能な説明に変換します | [All] | ✅ |
reply_customer() | 有効な会話コンテキスト内で返信します(24時間のウィンドウが開いている必要があります) | [All] | ✅ |
retry_failed_messages() | 再試行可能かを検証したうえで、1件以上の失敗したメッセージの手動再試行を開始します | [All] | ✅ |
sync_template_status() | Meta APIからテンプレートの承認ステータスを同期し、ローカルデータベースを更新します | [All] | ✅ |
読み取り専用インテリジェンス
| ツール | 説明 | ティア | ステータス |
|---|---|---|---|
check_conversation() | 会話ウィンドウのステータス、残り時間、種類、適格性を照会します | [All] | ✅ |
check_frequency_cap() | 顧客がMetaのマーケティングメッセージ送信頻度上限に達していないか確認します | [All] | ✅ |
get_customer_context() | オプトイン/オプトアウト、タグ、エンゲージメントスコア、適格性を含む顧客プロフィール全体を取得します | [All] | ✅ |
get_delivery_status() | エラー情報とともに、メッセージの配信ステータス(送信済み/配信済み/既読/失敗)を照会します | [All] | ✅ |
get_rate_limit() | 現在のMPS容量、消費済みトークン数、残りトークン数を照会します | [All] | ✅ |
list_conversations() | フィルター(open、closed、expiring_soon)を指定して会話を一覧表示します | [All] | ✅ |
list_templates() | Meta APIからステータス/カテゴリ/ロケールのフィルターを指定してテンプレートを一覧表示します | [All] | ✅ |
スケジュール設定とキャンペーン
| ツール | 説明 | ティア | ステータス |
|---|---|---|---|
schedule_message() | コンプライアンスの事前確認を行い、単一メッセージの将来の配信をスケジュールします | [All] | ✅ |
schedule_campaign() | 承認済みテンプレートとオーディエンスフィルターを使用して、一斉配信キャンペーンをスケジュールします | [Pro] | ✅ |
cancel_campaign() | 終端状態ではないキャンペーン(scheduled/running/paused)をキャンセルします | [Pro] | ✅ |
pause_campaign() | アクティブなキャンペーンを一時停止し、再開時に引き継げるよう進捗カウンターを保持します | [Pro] | ✅ |
アカウントとコストに関する情報
| ツール | 説明 | ティア | ステータス |
|---|---|---|---|
get_account_quality() | MetaからWABAの品質スコアとメッセージング上限のティアを取得します | [All] | ✅ |
estimate_cost() | 予定しているメッセージ一括送信の会話コストを見積もります | [All] | ✅ |
estimate_pricing() | 国/種類の組み合わせに対応する現在の会話料金ティアを照会します | [All] | ✅ |
運用
| ツール | 説明 | ティア | ステータス |
|---|---|---|---|
create_template() | 新しいテンプレートをMetaに承認申請し、ローカルにPENDINGとして保存します | [All] | ✅ |
sync_webhooks() | テンプレートのステータスと保留中のWebhookイベントの手動再同期を開始します | [All] | ✅ |
archive_chat() | 終端状態(ウィンドウの期限切れ)にある会話をアーカイブします | [All] | ✅ |
パラメーターの詳細な仕様とレスポンス例:docs/api_reference.md
アーキテクチャ
デュアルモードバイナリ
このプラットフォームは、2つのサーバーを同時に実行する単一のGoバイナリにコンパイルされます。
| モード | トランスポート | 目的 |
|---|---|---|
| MCP Server | stdio(stdin/stdout) | AIクライアント(Gemini、Claude、Cursor)に24個の構造化ツールを公開します |
| HTTP Server | TCP :8080 | Webhook受信、ヘルスチェック、Prometheusメトリクス |
コンポーネントの概要図
┌───────────────────────────────┐
│ AI Agent │
└──────────────┬────────────────┘
│ Stdio (MCP Protocol)
▼
┌────────────────────────────────────────────────────────┐
│ Meta Business MCP │
│ │
│ ┌───────────────────┐ ┌───────────────────┐ │
│ │ MCP Server ├───────►│ Compliance Engine │ │
│ └───────────────────┘ └─────────┬─────────┘ │
│ ▼ │
│ ┌───────────────────┐ ┌───────────────────┐ │
│ │ Webhook Receiver │ │ Policy Engine │ │
│ └─────────▲─────────┘ └─────────┬─────────┘ │
│ │ ▼ │
│ │ ┌───────────────────┐ │
│ │ │ Orchestrator │ │
│ │ └─────────┬─────────┘ │
└─────────────┼────────────────────────────┼─────────────┘
│ Webhook │ POST /messages
│ ▼
┌─────────────┴────────────────────────────┴─────────────┐
│ Meta Cloud API (or Mock :8081) │
└────────────────────────────────────────────────────────┘
コアサービス
| サービス | パッケージ | 役割 |
|---|---|---|
| MCP サーバー | pkg/mcp/ | AI エージェントからの24個のMCPツール呼び出しを登録して処理します。6つのハンドラーファイル(約2,000行)に分割されています。 |
| コンプライアンスエンジン | pkg/compliance/ | 24時間のケアウィンドウ、オプトアウト/オプトインの状態、頻度上限を適用します。 |
| ポリシーエンジン | pkg/policy/ | DBから動的なビジネスルール(時間制限、タグによる除外)を評価します。 |
| 会話状態エンジン | pkg/state/ | RedisキャッシュとPostgreSQLへのフォールバックを利用して、ケアウィンドウのTTLを管理します。 |
| ユーザーインテリジェンス | pkg/userintel/ | オプトイン、タグ(例:vip)、インタラクションのタイムラインを追跡します。 |
| テンプレートマネージャー | pkg/template/ | Metaから承認済みテンプレートを同期し、変数を検証してローカルにキャッシュします。 |
| 配信オーケストレーター | pkg/delivery/ | メッセージをNATS JetStreamにエンキューし、バックグラウンドのワーカープールを管理します。 |
| スケジューラー | pkg/delivery/ | スケジュール済みメッセージやキャンペーン向けの、プロセス内ポーリングベースのスケジューラーです。 |
| レートリミッター | pkg/ratelimit/ | Redis Luaスクリプトを利用し、顧客ごとのトークンバケット方式でレートを制限します。 |
| エラーインテリジェンス | pkg/errorintel/ | Metaのエラーコードを、再試行の可否に関する分類と説明にマッピングします。 |
| キャンペーンモジュール | pkg/campaign/ | キャンペーンのスキーマ、対象者フィルター、ティアで制限される操作を提供します。 |
| Webhookレシーバー | pkg/webhook/ | 受信したMetaイベント(メッセージ、ステータス、テンプレート)を解析して振り分けます。 |
| オブザーバビリティ | pkg/observability/ | カスタムPrometheusメトリクスを提供します。 |
永続化レイヤー
| レイヤー | テクノロジー | 用途 |
|---|---|---|
| プライマリDB | PostgreSQL 16 (pgxpool) | すべての永続データ:会話、メッセージ、顧客、テンプレート、ポリシー、キャンペーン、監査ログ。 |
| キャッシュ | Redis 7 | ケアウィンドウのTTL状態、Luaスクリプトによるトークンバケットカウンター、PostgreSQLへのグレースフルなフォールバック。 |
| メッセージブローカー | NATS JetStream | WorkQueue保持方式とプルコンシューマーを利用した非同期配信キュー。 |
データベーススキーマ(ER図)
erDiagram
customers ||--o{ conversations : has
conversations ||--o{ messages : contains
templates ||--o{ messages : sent_as
messages }|--o{ message_frequencies : logs
customers {
varchar id PK "Phone Number"
varchar channel
boolean opt_in_marketing
boolean opt_in_utility
timestamp last_interaction_at
double engagement_score
text_array tags
}
conversations {
uuid id PK
varchar customer_id FK
varchar channel
timestamp last_inbound_at
timestamp last_outbound_at
timestamp window_expires_at
varchar conversation_type
varchar active_template_id
varchar status "active/archived"
}
messages {
varchar id PK "Meta Message ID or UUID"
uuid conversation_id FK
varchar customer_id FK
varchar direction "inbound/outbound"
varchar message_type "text/template"
jsonb content
varchar status "queued/sent/delivered/read/failed/scheduled"
integer error_code
text error_message
integer retry_count
timestamp next_retry_at
timestamp deliver_at "nullable, for scheduled messages"
}
templates {
varchar name PK
varchar locale PK
varchar category "marketing/utility"
varchar status
text body_text
jsonb variables
}
policies {
varchar id PK
varchar name
varchar type
varchar channel
varchar message_type
boolean is_enabled
jsonb rules
}
error_knowledge_base {
integer code PK
varchar category
boolean can_retry
text human_explanation
text suggested_action
}
audit_logs {
uuid id PK
varchar action
jsonb details
timestamp created_at
}
NATS JetStreamキュートポロジー
| ストリーム | サブジェクト | コンシューマー | 最大配信回数 | Ack待機時間 | バックオフ |
|---|---|---|---|---|---|
META_MCP_DELIVERY | whatsapp.messages.outbound, whatsapp.messages.retry | delivery-workers(永続プル) | 3 | 30s | 1s → 5s(NakWithDelay) |
META_MCP_CAMPAIGN | whatsapp.campaigns.trigger | campaign-workers | — | — | — |
Redisキャッシュ戦略
- キャッシュキーのパターン:
conv:<customer_id>:<channel>(例:conv:628119989630:whatsapp) - TTL:24時間のケアウィンドウの正確な残り時間に動的に設定されます。
- グレースフルなフォールバック:Redisがオフラインの場合、状態エンジンはエラーを返さずにPostgreSQLへフォールバックします。障害シミュレーションテストで検証済みです。
- 電話番号の形式:内部キャッシュとDBには、先頭の
+プレフィックスを付けずに番号を保存します。MCPツールの境界では、+プレフィックス付きの入力を正規化します。
チャネルに依存しないアーキテクチャです。現在はWhatsAppを有効なチャネルとして使用しています。MessengerとInstagramは有効化の対象であり、ロードマップ上の確約ではありません。
アーキテクチャの全ドキュメント:docs/architecture.md
設定
設定ファイル(config.yaml)
ローカル開発では、プロジェクトのルートにconfig.yamlを配置します。
server:
http_port: 8080
mcp_name: "meta-business-mcp"
mcp_version: "1.0.0"
database:
host: "localhost"
port: 5432
user: "postgres"
password: "password"
dbname: "meta_mcp"
sslmode: "disable"
redis:
addr: "localhost:6379"
nats:
url: "nats://localhost:4222"
meta:
api_url: "http://localhost:8081" # Use mock server for offline dev
phone_number_id: "mock-phone-id"
waba_id: "mock-waba-id"
access_token: "mock-access-token"
webhook_verify_token: "mock-verify-token"
policies_path: "policies.yaml"
tier: "oss" # oss | pro | enterprise
環境変数
すべての設定値は環境変数で上書きできます。必須の値には ✅ が付いています。
| 変数 | デフォルト | 必須 | 説明 |
|---|---|---|---|
SERVER_HTTP_PORT | 8080 | — | HTTP サーバーのポート |
SERVER_MCP_NAME | "meta-business-mcp" | — | MCP サーバーの識別子 |
SERVER_MCP_VERSION | "1.0.0" | — | MCP サーバーのバージョン文字列 |
DB_HOST | "localhost" | — | PostgreSQL ホスト |
DB_PORT | 5432 | — | PostgreSQL ポート |
DB_USER | "postgres" | — | PostgreSQL ユーザー名 |
DB_PASSWORD | "password" | — | PostgreSQL パスワード |
DB_NAME | "meta_mcp" | — | PostgreSQL データベース名 |
DB_SSLMODE | "disable" | — | disable、require、または verify-ca |
REDIS_ADDR | "localhost:6379" | — | Redis 接続アドレス |
REDIS_PASSWORD | "" | — | Redis 認証パスワード |
REDIS_DB | 0 | — | Redis データベースインデックス |
NATS_URL | "nats://localhost:4222" | — | NATS 接続 URL |
META_API_URL | "https://graph.facebook.com" | — | Meta Graph API のベース URL |
META_ACCESS_TOKEN | — | ✅ | Meta API OAuth トークン(システムユーザー) |
META_PHONE_NUMBER_ID | — | ✅ | WhatsApp Business の電話番号 ID |
META_WABA_ID | — | ✅ | WhatsApp Business アカウント ID |
META_WEBHOOK_VERIFY_TOKEN | — | ✅ | Meta webhook 検証用パスフレーズ |
POLICIES_PATH | "policies.yaml" | — | ビジネスポリシーのシード YAML ファイルへのパス |
TIER | "oss" | — | 機能ティア:oss、pro、または enterprise |
SCHEDULER_POLL_INTERVAL | "30s" | — | 予約メッセージ/キャンペーンのスケジューラーポーリング間隔 |
ビジネスポリシー(policies.yaml)
起動時に policies.yaml からビジネスポリシーがシードされ、policies テーブルに保存されます。シードスクリプトは冪等(ON CONFLICT DO UPDATE)なので、アプリを再起動するだけで変更が適用されます。
- id: "no_marketing_after_8pm"
name: "No marketing after 8pm"
type: "time_restriction"
channel: "whatsapp"
message_type: "marketing"
is_enabled: true
rules:
deny_after: "20:00"
timezone: "Asia/Jakarta"
環境変数の完全なリファレンス:docs/env_variables.md
テスト
すべてのテストを実行
go test -count=1 -p 1 -cover ./...
コンプライアンスベンチマークを実行
go test -bench=BenchmarkCheckCompliance -benchtime=5s ./pkg/compliance/
パッケージのカバレッジ(Sprint 2)
| パッケージ | カバレッジ |
|---|---|
pkg/compliance | 93.9% |
pkg/errorintel | 100.0% |
pkg/config | 96.2% |
pkg/observability | 100.0% |
pkg/ratelimit | 87.5% |
pkg/webhook | 83.6% |
pkg/state | 83.3% |
pkg/userintel | 82.1% |
pkg/policy | 79.5% |
pkg/template | 78.9% |
pkg/campaign | 77.1% |
pkg/delivery | 73.8% |
pkg/mcp | 61.6% |
テストスイート
| スイート | ファイル | テスト数 | ステータス |
|---|---|---|---|
| v1 ハンドラー | pkg/mcp/server_test.go | 5(check_compliance、explain_error、send_message、send_template、電話番号の正規化) | ✅ |
| グループ A — インテリジェンス | pkg/mcp/server_test.go | 8(check_conversation、check_frequency_cap、get_customer_context、get_delivery_status ×2、get_rate_limit、list_templates、list_conversations) | ✅ |
| グループ B — メッセージング | pkg/mcp/server_test.go | 5(reply_customer ×2、retry_failed_messages ×2、sync_template_status) | ✅ |
| グループ C — キャンペーン | pkg/mcp/server_test.go | 5(schedule_message ×2、キャンペーンのティア制御 ×3) | ✅ |
| グループ D — アカウント | pkg/mcp/server_test.go | 4(estimate_cost、estimate_pricing、get_account_quality) | ✅ |
| グループ E — 運用 | pkg/mcp/server_test.go | 3(archive_chat ×2、sync_webhooks) | ✅ |
| スケジューラー | pkg/delivery/scheduler_test.go | 5(期限到来メッセージ、未来のメッセージ、コンプライアンス失敗、重複ディスパッチ、キャンペーントリガー) | ✅ |
| 統合テスト | tests/integration_test.go | 7 | ✅ |
| E2E | tests/e2e_test.go | 3 | ✅ |
| 障害シミュレーション | tests/failure_test.go | 4(Redis の障害、NATS の障害、Meta 500、Meta 131049) | ✅ |
ベンチマーク結果
| ツール | レイテンシ | 目標との比較 |
|---|---|---|
check_compliance() | 1.69 ms | 50ms の目標より約 30 倍高速 |
デプロイ
バイナリをビルド
go build -o mcp-server ./cmd/server/main.go
本番環境(.env)
SERVER_HTTP_PORT=8080
SERVER_MCP_NAME=meta-business-mcp
SERVER_MCP_VERSION=1.0.0
TIER=oss
DB_HOST=postgres.prod.internal
DB_PORT=5432
DB_USER=mcp_user
DB_PASSWORD=production_secure_postgres_pass
DB_NAME=meta_mcp
DB_SSLMODE=require
REDIS_ADDR=redis.prod.internal:6379
REDIS_PASSWORD=production_redis_auth_pass
REDIS_DB=0
NATS_URL=nats://nats.prod.internal:4222
META_API_URL=https://graph.facebook.com
META_ACCESS_TOKEN=EAAG...production_long_lived_system_user_token...
META_PHONE_NUMBER_ID=106555123456789
META_WABA_ID=204555123456789
META_WEBHOOK_VERIFY_TOKEN=production_webhook_verification_passphrase
POLICIES_PATH=/app/policies.yaml
SCHEDULER_POLL_INTERVAL=30s
本番用 Docker Compose
services:
postgres:
image: postgres:16-alpine
restart: always
environment:
POSTGRES_USER: mcp_user
POSTGRES_PASSWORD: production_secure_postgres_pass
POSTGRES_DB: meta_mcp
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U mcp_user -d meta_mcp"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
restart: always
command: redis-server --requirepass production_redis_auth_pass
volumes:
- redisdata:/data
healthcheck:
test: ["CMD", "redis-cli", "-a", "production_redis_auth_pass", "ping"]
interval: 10s
timeout: 5s
retries: 5
nats:
image: nats:alpine
restart: always
command: "--jetstream -m 8222"
ports:
- "4222:4222"
volumes:
- natsdata:/data
healthcheck:
test: ["CMD", "nc", "-z", "localhost", "4222"]
interval: 10s
timeout: 5s
retries: 5
app:
build:
context: .
dockerfile: Dockerfile
restart: always
ports:
- "8080:8080"
env_file:
- .env
volumes:
- ./policies.yaml:/app/policies.yaml
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
nats:
condition: service_healthy
volumes:
pgdata:
redisdata:
natsdata:
docker compose -f docker-compose.prod.yaml up -d --build
データベースのマイグレーションとシーディング
外部のマイグレーションランナーは不要です。起動時に、アプリケーションが自動的に以下を実行します。
- すべてのデータベーステーブル(
customers、conversations、messages、templates、policies、campaigns、message_frequencies、error_knowledge_base、audit_logs、conversation_pricing)を作成します。 - 標準のMetaエラーコードを
error_knowledge_baseにシードします。 policies.yamlのビジネスポリシーを、冪等性のあるON CONFLICT DO UPDATEを使ってシードします。- ID、US、IN、BR、GB、およびDEFAULTのフォールバック用の会話料金データをシードします。
スキーマの変更にはすべてIF NOT EXISTS/ADD COLUMN IF NOT EXISTSを使用します。既存のデプロイ環境は、アプリケーションを再起動するとアップグレードされます。
Webhookの登録
Meta App Developer Portalに公開URLを登録します。
- 検証:
GET /webhook—hub.challengeを返します。 - イベント:
POST /webhook— 受信メッセージ、ステータス更新、テンプレートイベントを受信します。 - 署名の検証:すべてのPOSTイベントで
X-Hub-Signature-256ヘッダーを検証します。
インフラストラクチャの依存関係
| 依存関係 | 最低バージョン | 備考 |
|---|---|---|
| PostgreSQL | 16 | AWS RDSに対応 |
| Redis | 7 | AWS ElastiCacheに対応 |
| NATS Server | 最新の安定版 | JetStream(--jetstream)を有効にする必要があります |
| Go | 1.21+ | ビルド専用 |
| Docker | 20.10+ | Compose V2が必要です |
ビジネスモデル
| ティア | 価格 | WABA数 | メッセージ数 | 機能 |
|---|---|---|---|---|
| OSS | 無料 | 1 | 1日あたり200件 | コンプライアンスエンジン、基本的なメッセージング、読み取り専用インテリジェンス |
| Pro | $149/月 | 最大5 | 無制限 | MCPツールスイート全機能、キャンペーン管理、スケジュール設定、ダッシュボード |
| Enterprise | $499/月 | 無制限 | 無制限 | 専用インフラストラクチャ、SSO、カスタムポリシー、SLA |
キャンペーン操作(schedule_campaign、cancel_campaign、pause_campaign)はProティアでのみ利用できます。
Apache 2.0ライセンスで提供されています。
ロードマップ
| フェーズ | マイルストーン | 状況 |
|---|---|---|
| Phase 1 | v1.0 — コアプラットフォーム(4ツール) | ✅ 完了 |
| Phase 2 | Sprint 2 — MCPツールの完成(4→24ツール) | ✅ 完了 |
| Phase 3 | ツール名の変更 + PRDの更新 | ✅ 完了 |
| Phase 4 | 運用ダッシュボード(Next.js + go:embed) | ✅ 完了 |
| Phase 5 | マネージドクラウドMVP(Railway、Stripeによる課金) | 次の予定(3~6週目) |
| Phase 6 | デザインパートナーによる検証(代理店3~5社のベータ版) | 5~10週目 |
| Phase 7 | 商用ローンチ(Pro $149/Enterprise $499) | 9~12週目 |
| Phase 8 | 拡大(有料顧客15~20社) | 4~6か月目 |
MessengerとInstagramは、資金が確保されるまで対象外です。これらのチャネルに関するロードマップ上の確約はありません。
ロードマップの詳細:PRD_MetaBusinessMCP.md §27
オブザーバビリティ
HTTPエンドポイント
| エンドポイント | メソッド | レスポンス |
|---|---|---|
/health | GET | 200 OK — 本文:「OK」 |
/metrics | GET | 200 OK — Prometheusスクレイプ用ペイロード |
/webhook | GET | 200 OK — webhookチャレンジのエコー |
/webhook | POST | 200 OK — 本文:「EVENT_RECEIVED」 |
ヘルスチェック
curl http://localhost:8080/health
Prometheusメトリクス
curl http://localhost:8080/metrics
カスタムメトリクスはpkg/observability/に登録されています。標準のGoランタイムおよびプロセスメトリクスは、デフォルトのPrometheusレジストリを介して自動的に含まれます。
ロギング
構造化ログはstdout/stderrに出力されます。Dockerで収集します。
docker compose logs -f app
NATSのモニタリング
NATSのモニタリング用HTTPインターフェースは:8222で利用できます。ストリームとコンシューマーの統計情報はhttp://localhost:8222/jszで確認できます。
ドキュメント一覧
| ドキュメント | 説明 |
|---|---|
| docs/architecture.md | コンポーネントの構成、DB スキーマ(ER)、NATS ストリームのトポロジー、Redis のキャッシュ戦略 |
| docs/api_reference.md | HTTP エンドポイントの仕様と、リクエスト/レスポンス例を含む 24 種類すべての MCP ツールの仕様 |
| docs/deployment_guide.md | 本番環境へのデプロイ手順、Docker Compose テンプレート、マイグレーション |
| docs/developer_guide.md | ポリシーの追加、新しい MCP ツールの登録、NATS キューワーカーの拡張方法 |
| docs/env_variables.md | 環境変数の完全な一覧 |
| docs/limitations.md | 既知のプラットフォーム制限と今後のロードマップ |
| docs/mcp-tools-test-report.md | 24 種類すべての MCP ツールの統合テストレポート |
| walkthrough-1.md | MVP の実装概要 |
| walkthrough-2.md | フェーズ 6:強化とドキュメント整備 — テスト、ベンチマーク、ドキュメント作成スプリント |
| walkthrough-3.md | WABA の本番環境での検証、リグレッション修正、境界値の正規化 |
| walkthrough-4.md | スプリント 2:MCP ツールの完成(4→24 ツール)— アーキテクチャ上の決定、テストカバレッジ |
| PRD_MetaBusinessMCP.md | 製品要件定義書 v3.2 |
コントリビューション
このプロジェクトでは、Go 1.21 以降、PostgreSQL 16、Redis 7、NATS JetStream を使用しています。
- リポジトリをフォークします。
- フィーチャーブランチを作成します:
git checkout -b feature/my-change - 提出前にテストを実行します:
go test -count=1 -p 1 ./... - 変更内容を明確に説明してプルリクエストを提出します。
ポリシーの拡張、MCP ツールの追加、キューワーカーのアーキテクチャの利用方法については、docs/developer_guide.md を参照してください。
ライセンス
Apache License 2.0
Copyright 2026 Adam Zibran
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。