CRM Lifecycle Ops について
CRM Lifecycle Opsは、Braze、Klaviyo、Iterableを使うライフサイクルおよびマーケティング運用チーム向けの、読み取り専用Claude CodeプラグインとCLIです。コードで複数チャネルのメッセージを検査し、実アカウントの計画・影響分析機能は初期アルファ段階です。
主な機能
- 01メール、SMS、プッシュ、アプリ内コンテンツの検査
- 02異なる顧客データでパーソナライズを描画
- 03組み込みルールとチームルールの適用
- 04CIでのメール検査
- 05アカウント変更と影響範囲のプレビュー
活用シーン
- 01メール配信前にリンク切れを検出
- 02SMSの長さと配信停止文言を確認
- 03アカウント編集前にキャンペーン変更を確認
- 04CIパイプラインで不合格のメール検査を停止
MCP 対応
エンジンはローカルMCPサーバーとして、CursorやClaude DesktopなどのMCPクライアントから利用できます。デモデータまたは読み取り専用のプラットフォームアクセスを使い、メッセージの送信やアカウント編集は行いません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y crm-lifecycle-opsCLO_BRAZE_API_KEYシークレットBraze REST API key (read-only permissions). Leave unset to skip Braze.CLO_BRAZE_REST_ENDPOINTBraze REST endpoint for your instance, e.g. https://rest.iad-01.braze.comCLO_BRAZE_WORKSPACEA label for the Braze workspace this key belongs to.CLO_KLAVIYO_API_KEYシークレットKlaviyo private API key (read-only scopes). Leave unset to skip Klaviyo.CLO_KLAVIYO_ACCOUNTA label for the Klaviyo account this key belongs to.CLO_ITERABLE_API_KEYシークレットIterable server-side API key (read-only). Leave unset to skip Iterable.CLO_ITERABLE_REGIONIterable data center: us or eu.CLO_ITERABLE_PROJECTA label for the Iterable project this key belongs to.CLO_RULESOptional path to a shared house-rules file so a whole team is checked the same way.CLO_TEAM_DIROptional shared folder for the team usage report (check counts only, no message content).ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
20掲載時のツール一覧 · 3 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| file | string | いいえ | ローカルの .html ファイルの絶対パスです。html が指定されていない場合に使用します。 |
| from | string | いいえ | 送信者のメールアドレスです。 |
| html | string | いいえ | テンプレートタグを含むメールの HTML です。 |
| name | string | いいえ | |
| subject | string | いいえ | |
| personas | array | いいえ | 合成テストペルソナです。空のままにすると、チームのペルソナまたは自動生成されたペルソナが使用されます。 |
| platform | enum | はい | メールで使用するテンプレート言語のプラットフォームです。braze | klaviyo | iterable |
| preheader | string | いいえ | |
| transactional | boolean | いいえ | 領収書、パスワードリセットなどのトランザクションメールでは、配信停止要件をスキップします。 |
| check_links_live | boolean | いいえ | ネットワーク経由で各リンクも確認します(HEAD リクエストのみ。配信停止リンクとクリックトラッキングリンクにはリクエストしません)。 |
詳細
crm-lifecycle-ops
Braze、Klaviyo、Iterable 向けの配信前 QA です。 すべてのメール、テキスト、プッシュ通知、アプリ内メッセージを、あらゆる種類の顧客としてコードでチェックしてから配信します。さらに、ライブアカウントで、変更によって何が壊れるか、どう構築するかを確認できます。
80 秒のデモ(音声をオンにしてください):
https://github.com/user-attachments/assets/dc4e632c-f71e-43d5-8451-6e2a67b6471e
手作業でキャンペーンを作成するライフサイクル、CRM、マーケティングオペレーションチーム向けの Claude Code プラグイン(および CI 用 CLI)です。 メッセージのチェック機能は現在すべて利用できます。ライブアカウント機能は初期アルファ段階です(下のステータス欄を参照)。 読み取り専用で、何かを送信したり編集したりすることはありません。
30 秒で試す
アカウントも Claude Code も必要ありません。Node.js 20+ だけで、パッケージに同梱されているサンプルメール 4 件をチェックできます。
npx crm-lifecycle-ops check --demo
次に、自分のテンプレートを指定します:npx crm-lifecycle-ops check path/to/emails。これでメールをチェックできます。下記のプラグインでは、残りの機能も利用できます。すべてのチャネル、ライブアカウント、変更によって何が壊れるか、構築手順を確認できます。
できること
| 試す | ||
|---|---|---|
| 計画と構築を効率化 | プラットフォームの用語を使った、クリックごとの構築手順。命名規則と UTM も反映されます | /build-plan |
| 安全に変更 | セグメント、フィールド、共有ブロックを変更する前に、その変更で何が壊れるかを確認できます | /what-breaks |
| 安心して配信 | あらゆる種類の顧客として、すべてのチャネルのすべてのメッセージをチェックします | /check-campaign |
| 効果を実証 | 配信後の健全性に加え、発見した問題や削減した作業時間を確認できます | /ops-report |
クイックスタート
Claude Code と Node.js 20+ が必要です。
/plugin marketplace add har5h98/crm-lifecycle-ops
/plugin install crm-lifecycle-ops@crm-lifecycle-ops
まずは組み込みのデモアカウントで試してみましょう。プラットフォームへのアクセスは必要ありません。
/refresh demoで架空のブランドの Braze ワークスペースを読み込みます。/check-campaign Price Drop Alertでキャンペーン全体をチェックします。/what-breaks loyalty_tierで変更による影響を確認します。
ご自身のアカウントを使う準備ができたら、次の操作を行います。
/setupでチームのルールを登録します(約5分かかります。気に入っているメールを貼り付けると、そこから学習させることもできます)。/connectで読み取り専用キーを追加します。キーはプラグインの設定とシステムのセキュアストレージに保存され、チャットには保存されません。
Cursor、Claude Desktop、または別の MCP クライアントを使用していますか?
エンジンは npm でも公開されているため、どの MCP クライアントからでも実行できます。スラッシュコマンドは Claude Code のスキルなので、ほかの環境では自然な言葉で依頼してください(「このメールをチェックして」「loyalty_tier の名前を変更したら何が壊れる?」など)。
{
"mcpServers": {
"crm-lifecycle-ops": {
"command": "npx",
"args": ["-y", "crm-lifecycle-ops"],
"env": { "CLO_BRAZE_API_KEY": "…", "CLO_BRAZE_REST_ENDPOINT": "https://rest.iad-01.braze.com" }
}
}
}
デモアカウントを使う場合は、env を省略してください。すべての設定は server.json に記載されています。
CI でメールテンプレートをチェックする
同じチェックをターミナルから実行できるため、パイプラインでメールの不具合を検出し、配信前に停止できます。ブロッキング問題がある場合は終了コード 1 を返します(--fail-on warn を指定すると警告の場合も終了コード 1 を返します)。ルールファイルを渡さない場合は組み込みルールを使用するため、どのマシンでも同じ判定になります。チームのルールファイル(/setup が ~/.crm-lifecycle-ops/rules.json に保存するファイル)をコミットし、そのファイルを指定してください。
npx crm-lifecycle-ops check emails/ --rules team-rules.json
# .github/workflows/email-qa.yml
on: pull_request
jobs:
email-qa:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npx -y [email protected] check emails/ # pin a version so new checks don't change your build
--help でオプション(--platform、--subject、--transactional、--json)を確認できます。テンプレート言語はファイルごとに検出されます。ファイルから判別できない場合、出力には「guessed」と表示されるため、その場合は --platform を指定してください。
アルファ版(初期段階)です。 デモアカウントとモック API レスポンスを使った動作はすべて確認済みです。実際のアカウントでの実地テストはまだ行っていません。結果に誤りがある場合は、
/report-problemでテストと修正を作成できます。
使用例

デモアカウントでの実際の出力:
/check-campaign Price Drop Alert 🔴 Don't send. 1 blocking problem
fail links.non-production-host "See items" points at staging.fernbrook.example
warn personalization.dangling-punct. Someone with no first name on file sees "Hi ,"
warn html.img-missing-alt 1 image has no alt text
warn a11y.no-lang No lang attribute, so screen readers guess the language
/check-sms Flash Sale Text 🟡 Fix before sending
warn sms.unicode "’" and "—" switch the text to Unicode: 70 characters per segment, not 160.
Swap ’ → ' and — → -
warn sms.too-many-segments Up to 3 billed segments; house limit is 2
warn sms.no-opt-out No "Reply STOP to opt out"
合否の判定はすべてコードが行い、AI は一切関与しません。 Claude はその上に、ラベル付きの参考レビュー(件名、CTA、トーン)を追加します。ローンチチケット用の記録が必要ですか? /check-campaign に QA 承認レポートを依頼してください。すべての指摘事項、検証できなかった項目、レビュアーの承認をまとめた Markdown ファイルが作成され、Jira、Slack、Notion にそのまま貼り付けられます。
すべてのコマンド
✅ 現時点ですべての機能が動作します · 🧪 デモアカウントとモック API では動作しますが、実アカウントではまだ実地テストされていません
| コマンド | 機能 | ステータス | |
|---|---|---|---|
| 始める | /start-here | 概要と、最初に行うのに最適な手順 | ✅ |
/setup | チームのルール(言語、ブランド、リンク、フッター、送信者、テスト顧客、厳格さ)を設定します | ✅ | |
/house-rules | ルールを表示または変更し、検出項目に「問題なし」とマークします | ✅ | |
/connect | 読み取り専用キーを使って Braze、Klaviyo、または Iterable に接続します | 🧪 | |
/refresh | 最新のキャンペーン、ジャーニー、セグメント、テンプレート、コンテンツブロックを取得します(またはデモを読み込みます) | 🧪 | |
| 計画して構築する | /plan-journey | ジャーニーを設計し、すでに稼働中のものと重複していないか確認します | 🧪 |
/build-plan | 利用しているプラットフォーム固有の用語で、手順ごとの構築方法を示します | 🧪 | |
/bulk-edit | すべての件名、本文、コンテンツブロックを対象に、検索と置換の内容をプレビューします | 🧪 | |
| 安全に変更する | /what-breaks | 属性、セグメント、ブロック、イベント、リンクを変更または削除した場合の影響を確認します | 🧪 |
/what-changed | 前回以降にアカウントで変更された内容を、稼働中の項目から優先して確認します | 🧪 | |
/edit-plan | 稼働中のもの(コピー、実行中のジャーニー、共有ブロック、オーディエンス)を安全に変更する方法を示します | 🧪 | |
/show-journey | 稼働中のジャーニーを図にして、構造上の問題に印を付けます | 🧪 | |
| 安心して送信する | /check-campaign | キャンペーンまたはジャーニー全体(すべてのメッセージ、設定、構造)を確認します | 🧪 |
/check-email | 1 通のメール(HTML、リンク、配信停止、UTM、パーソナライズ、チームのルール)を確認します | ✅ | |
/check-push | 1 件のプッシュ通知(最も長い名前に合わせたロック画面での文字数、ディープリンク、空欄)を確認します | ✅ | |
/check-sms | 1 件のテキストメッセージ(課金対象のセグメント数、Unicode の落とし穴、オプトアウトの文言、送信者名)を確認します | ✅ | |
/check-in-app | 1 件のアプリ内メッセージまたはコンテンツカード(文字数、ボタン、リンク)を確認します | ✅ | |
| 効果を実証する | /watch-launch | バウンス、配信停止、迷惑メール、配信率をしきい値と照らし合わせます | 🧪 |
/ops-report | 個人またはチーム全体について、確認したメッセージ数、検出した問題、削減できた時間をレポートします | ✅ | |
/report-problem | 誤った結果を報告します。報告内容はテストケースになり、修正されます | ✅ |
詳細
「チェック」の対象範囲(チャネル別)
| チャネル | 検出する項目 |
|---|---|
| メール | Outlook のブロックの破損、閉じられていないテーブル、alt テキストの欠落、Gmail によるクリッピング、欠落している・件名と重複している・「View in browser」と表示されるプリヘッダー、ステージング環境または形式が不正なリンク、http://、UTM の不整合、ページの破損(ライブチェック)、配信停止リンクの欠落(トランザクションメールではスキップ) |
| アクセシビリティ(メール) | lang の欠落、「ここをクリック」というリンク、alt テキストのない画像のみのリンク、スクリーンリーダーがデータとして読み上げるレイアウト用テーブル、12px 未満のテキスト |
| プッシュ通知 | 最も長い顧客名を使った場合のタイトルと本文の長さ、iOS でタイトルが隠れる改行、ディープリンク、Android で必須のタイトル(Braze) |
| SMS | キャリアの計算方式に基づく課金対象セグメント数、テキストを Unicode に切り替える正確な文字、オプトアウトの文言、送信者名、各プラットフォームの上限 |
| アプリ内メッセージ | 本文の長さ、ボタンとそのリンク、クリック後の遷移先、HTML 構造 |
| コンテンツカード | タイトルとメッセージの長さ、カードのリンクと画像の遷移先 |
| ウェブフック | URL の欠落またはステージング URL、URL に書き込まれたキー、名前に引用符が含まれると壊れる JSON 本文 |
| パーソナライズ(すべて) | 完全な値、空の値、長い値、アクセント記号付きの名前を持つ顧客(または自分自身)について、すべてのメッセージをレンダリングします。Hi , のような空欄、リテラルの null、残った {{ }}、テンプレートエラー、送信を気づかれないままスキップする Iterable の比較処理を検出します |
| キャンペーンとジャーニー | オーディエンスとコンバージョンイベント、命名規則、行き止まりの分岐、到達不能なステップ、空のメッセージステップ |
Braze Liquid、Klaviyo のテンプレート言語、Iterable Handlebars に対応しています。ローカルで実行できないプラットフォームタグ(クーポンコード、カタログ検索、Connected Content)は、合格または不合格ではなく、未検証として報告されます。ID 付きの完全な一覧はこちらです:src/checks/catalog.ts。
チーム独自のルールも設定できます
何が「誤り」かはチームによって異なるため、チェックには3つの階層があります。
| 階層 | 例 | チームで変更できますか? |
|---|---|---|
| 固定:誰にとっても誤り | 配信停止リンクがない、レンダリングされないテンプレート構文、壊れたリンク | いいえ |
| デフォルト:どこでも妥当 | alt テキストの欠落、http:// リンク、Gmail によるクリッピング、UTM タグの混在 | 再評価または無効化 |
| チーム独自のルール:チームの慣例 | スペル、日付形式、ブランド用語、禁止フレーズ、承認済みドメインと送信者、UTM の命名規則、フッター、件名の長さ、名前のフォールバック、命名規則、テスト用顧客 | /setup で設定 |
「これは問題ない」という判断は、理由付きの記録済み例外(/house-rules)になり、「ツールが間違っている」という報告(/report-problem)とは区別されます。プラグインの設定で同じ 共有ルールファイル を指定すると、チーム間で同じルールブックを共有できます。
(現時点で)確認できないこと
すべての結果には検証できなかった項目が記載され、すべての依存関係には、その情報がどのように確認されたか(API で確認済み、テンプレートから読み取り、セグメントの説明から読み取り、画面上で確認)が示されます。
- ローカルでのレンダリングは近似です。 Braze Connected Content とカタログ検索は実行されず、Klaviyo のテンプレート言語も近似的に処理されます。これらは未検証として報告されます。
- Braze の API では、キャンペーンまたは Canvas の対象セグメントがわかりません。
/what-breaksはこれらを「除外できない項目」として一覧表示します。また、許可を得たうえで、Claude in Chrome を使って Braze ダッシュボードから読み取ることができます。 - Iterable の API はジャーニーのステップ順を返さないため、 Iterable のジャーニーではメールは表示されますが、経路は表示されません。
- Braze のコンテンツカードは API から返されるフィールドが少ないため、カードのチェックはコピーを貼り付けた場合に最も詳細になります。
- アカウント内で作成や編集を行うことはありません。
/build-planと/edit-planでは方法を案内し、/bulk-editではプレビューのみを行います。
メッセージの送信やアカウントの編集は行いません。顧客プロフィールを読み取ることもありません(架空の顧客を使ってテストします)。作者や第三者に情報を送信することもありません。
| 内容 | タイミング | 送信先 |
|---|---|---|
ローカル MCP サーバー(node dist/mcp-server.js、src/ にソースコードを収録) | Claude Code がプラグインを読み込むとき | お使いのマシンのみ |
| 読み取り専用の API 呼び出し | /refresh、/watch-launch | 接続したプラットフォームのみ:Braze の REST エンドポイント、a.klaviyo.com、または api.iterable.com / api.eu.iterable.com |
| リンクのチェック(配信停止リンクとトラッキングリンクはリクエストしません) | ライブリンクチェックを依頼した場合のみ | チェック対象のメール内のリンク |
| ローカルファイル:スナップショット、運用ルール、QA 承認レポート、チェック ID と件数の使用ログ | 通常の使用時 | ~/.crm-lifecycle-ops/ |
| 使用ログのコピー(件数のみ。メッセージの内容は含みません) | チームのレポートフォルダーを設定した場合のみ | 選択したフォルダー |
| GitHub の Issue | /report-problem から、正確な内容を承認した後のみ | github.com/har5h98/crm-lifecycle-ops |
API キーはプラグインの設定(セキュアストレージ)からのみ読み取ります。SECURITY.md と プライバシーポリシーをご覧ください。
詳しくはこちら
改善の仕組み
- 問題を報告します:
/report-problemを使うと、誤った結果を編集済みの GitHub Issue にできます(投稿前に確認を求めます)。 - テストに追加されます: 確認済みの各報告は
tests/corpus/に追加され、以降は必ずテストに合格する必要があります。 - 修正案を自動で作成します: Claude がテストと修正案を作成し、人間がレビューするプルリクエストとして提出します。
- ベンダーの変更を監視します: 週次ジョブで Braze、Klaviyo、Iterable の API の変更を確認し、月次ジョブでチェックリストを作成して、ベンダーのドキュメントに照らしてビルド手順と編集ガイドを再確認します。各プランには手順を最後に検証した日付が記載され、90日以上経過すると警告が表示されます。
誤った結果を報告することが、最も価値のある貢献になります。CONTRIBUTING.mdをご覧ください。
ライセンス
MIT。Braze、Klaviyo、Iterable とは提携しておらず、各社からの推奨も受けていません。製品名は各所有者の商標です。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。