mcpField
A
Adwarp

Adwarp

リモート
adwarp.devビジネス・マーケティング235 日前に更新
リポジトリ公式サイト

Adwarp について

Adwarpは、go-to-marketチーム向けのオープンソース広告エージェントです。会話またはCLIでLinkedIn AdsとGoogle Adsのキャンペーンを扱い、オーディエンス、レポート、競合広告情報にも対応します。新規作成は下書きまたは一時停止状態が既定です。

主な機能

  1. 01LinkedInとGoogle検索キャンペーンの作成
  2. 02CSV、Salesforce、HubSpotからのオーディエンス作成
  3. 03広告実績と推移レポートの確認
  4. 04競合の公開広告情報の調査
  5. 05変更記録と前後効果の分析
  6. 06CLIによるバッチ操作

活用シーン

  1. 01連絡先リストと概要からキャンペーンを作成
  2. 02リーチを見積もりマッチドオーディエンスを構築
  3. 03期間ごとの広告実績を比較
  4. 04競合の広告文やターゲティング情報を確認

MCP 対応

ローカルのstdio MCPサーバーを提供し、ホスト型MCPエンドポイントにも接続できます。キャンペーン、オーディエンス、レポートの操作をMCPクライアントに公開し、CLIと同じエンジンを使用します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://mcp.adwarp.dev/api/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

すべてのエンドポイント
Streamable HTTPhttps://mcp.adwarp.dev/api/mcp認証が必要
パッケージ
npmadwarp0.4.0

ツール

詳細

Adwarp

npm License: MIT

ウェブサイト · ドキュメント · インストールガイド · npm パッケージ

Adwarp(旧称 Liam)は、LinkedIn Ads と Google Ads 向けのオープンソースの広告エージェントです。 Claude(MCP)との会話、または CLI からキャンペーンを作成できます。連絡先リストと概要から多数のキャンペーンを立ち上げ、その後、自分たちでクリエイティブ画像を追加したい市場開拓チーム向けに構築されています。 すべて最初はオフになっています。LinkedIn のエンティティはドラフトとして、Google のエンティティは一時停止状態で作成されます。LinkedIn のキャンペーンが有効になるのは、Adwarp にオンにするよう明示的に指示した場合、または Campaign Manager で自分で有効にした場合のみです。Google のキャンペーンは Google Ads の UI からのみ有効にできます。

非公式のものであり、LinkedIn または Google との提携や、両社からの承認を受けたものではありません。

作成、マッチドオーディエンス(Salesforce または HubSpot から直接作成する機能を含む)、コンバージョンの選択、パフォーマンスレポート/インサイト、競合他社の広告インテリジェンス、変更前後の効果を確認できる変更履歴に対応しています。リリース済みの機能と今後の予定については、ROADMAP.md をご覧ください。

できること

Adwarp を接続したら、アシスタントに自然な言葉で話しかけられます。現在対応している実際のリクエストを、キャンペーンの流れにおおむね沿って紹介します。

  • 「米国の SaaS 企業で、需要創出担当の VP は何人にリーチできますか?」(ターゲティングの条件を解決し、費用が発生する前にリーチ数を見積もります)
  • 「この CSV をマッチドオーディエンスとしてアップロードして。」(列を自動で整理し、メールアドレスをハッシュ化し、LinkedIn の人物マッチング用に名前、企業名、役職を保持し、企業ドメインを URL に変換します)
  • 「Salesforce からオーディエンスを作成して。ターゲットとしてフラグが付いたアカウントの全連絡先を対象にして。」(SOQL からマッチドオーディエンスを直接作成します)
  • 「HubSpot のターゲットアカウントリストを LinkedIn オーディエンスにして。」(HubSpot のリストまたは検索から、連絡先または企業のマッチドオーディエンスを直接作成します)
  • 「そのオーディエンス向けに、1 日 100 ドルで、デモ予約コンバージョンを追跡するドラフトキャンペーンを立ち上げて。」(1 回の呼び出しでキャンペーングループ、キャンペーン、ドラフト広告を作成します)
  • 「今、最大の競合他社はどんな広告を出していて、どんなオファーを打ち出していますか?」(公開されている Ad Library から、あらゆる企業の広告コピー、フォーマット、EU のターゲティングメタデータを取得します)
  • 「先月のリターゲティングの成果は、その前の月と比べてどうでしたか?」(差分を含む推移レポートを作成します)
  • 「今週、一時停止すべき広告はどれですか?」(上位/下位の成果を出している広告と注意点をアカウント全体でまとめた後、選択した広告を一時停止し、各広告グループの残りの広告は配信を続けます)
  • 「成果の悪い広告のコピーを書き直して。」(広告を削除して、新しいドラフトとして作り直します。LinkedIn では配信中の広告の投稿内容を編集しても反映されません)
  • 「新しい見出しは実際に効果がありましたか?」(変更履歴と変更前後の効果を確認します)

Adwarp が詳細を解決し、ID を報告します。すべての機能は、スクリプトや一括処理で使える adwarp CLI コマンドとしても利用できます。

定期的に実行する

Adwarp にスケジューラーはありません。利用するクライアントのスケジューラーを使ってください。次のような定期実行が効果的です。

  • 「毎週月曜日の午前 9 時に、先週のパフォーマンス概要を取得し、その前の週と比較して、20% を超えて変動したものにフラグを付けて。」(Claude Code のスケジュール済みエージェント)
  • 「毎週金曜日に、競合上位 3 社が今週新たに出した広告を確認し、訴求内容を要約して。」
  • 「数時間おきにオーディエンスのマッチ状況を確認し、300 メンバーを超えたら知らせて。」(マッチドオーディエンスの配信に必要な最小数です)
  • またはアシスタントを使わず、CLI を cron に登録します。 0 9 * * 1 adwarp report summary -p last_7_days

階層の対応関係(2つのプラットフォームで異なります)

LinkedInの名称は、他のプラットフォームより1階層ずれているため、両方を使う際に最もよく混乱が生じる原因となっています。

共通用語LinkedInのエンティティGoogle Adsのエンティティ含まれるもの
キャンペーンCampaign Group(なし)ステータス、合計/共有予算
広告グループCampaignCampaignターゲティング、予算、入札単価、スケジュール、フォーマット
(なし)(なし)Ad groupキーワードと、それに応える広告
広告CreativeAd group ad表示される広告
オーディエンスDMP SegmentUser listターゲティングに適用

つまり、LinkedInの「campaign」とGoogleの「campaign」は同じものではありません。Googleのキャンペーンは予算とターゲティングを保持し(LinkedInの campaign group と campaign に相当)、広告グループはキーワードを保持します。

Google Ads

検索キャンペーンのみを対象とし、作成を優先しています。現在できることは次のとおりです。

adwarp google auth login
adwarp google accounts list                       # proves the token and OAuth client work
adwarp google keywords "revops automation" --url https://example.com/product
adwarp google conversions list
adwarp google launch --brief examples/google-brief.json           # dry run
adwarp google launch --brief examples/google-brief.json --apply   # create it, paused
adwarp google campaigns list
adwarp google report perf keyword -p last_30_days

起動時には、予算、キャンペーン、地域と言語のターゲティング、広告グループ、キーワード、レスポンシブ検索広告を1回のアトミックな mutateで作成します。すべてが反映されるか、何も反映されないかのどちらかなので、失敗してキャンペーンが中途半端な状態で残ることはありません。すべての書き込みは、実行前にサーバー側で検証されます。これはローカルで推測するのではなく、実際のドライランです。

UIでは3つすべてのデフォルト設定が不適切で、B2Bの予算を気づかないうちに浪費してしまうため、次の3つのルールをハードコードしています。

  • 検索ネットワークのみ。 ディスプレイへの拡張と検索パートナーはオフです。
  • 実際にその場所にいるユーザーのみ。 「US」は米国内のユーザーを意味し、場所を問わず米国について検索したユーザーを意味するものではありません。
  • 最初は手動CPC。 コンバージョン履歴がない状態で自動入札を使うと、予測不能な支出が発生します。データが蓄積されたらUIで切り替えてください。
セットアップ

Google Adsでは、LinkedInには不要なものが2つ必要です。

  1. デベロッパートークン。Google Adsのマネージャー(MCC)アカウントから取得します。 ads.google.com/aw/apicenter をご覧ください。通常のクライアントアカウントでは発行できません。通常、承認されると自動的にExplorerアクセス権が付与されます(本番環境で1日2,880オペレーション)。

    adwarp google keywords にはExplorerでは不十分です。 ExplorerではKeywordPlanServiceがブロックされるため、キーワード調査にはBasicアクセス権(1日15,000オペレーション)が必要です。これは同じ画面から別途申請します。Explorerでもキャンペーンの作成とレポートの利用は問題なく行えます。

  2. OAuthクライアント。Google Ads APIを有効にしたGoogle Cloudプロジェクトから取得します。「デスクトップアプリ」タイプを使うと、任意の localhost リダイレクトを使用できます。

    同意画面は**「Testing」のままにしないでください**。このステータスでは、7日後に使えなくなる更新トークンが発行されます。それ以外の選択は、次のようになります。

    • Internal(Workspace組織のみ)は、単一企業向けツールとしてGoogleのOAuthドキュメントが推奨する設定です。最も簡単で、検証が不要であり、7日間の有効期限もありません。
    • External + In productionは、ブランド検証を受けるための前提条件です。ブランド検証は、Basicアクセス権の審査を数日から数時間に短縮する試験的なプログラムです。ただし、auth/adwords は機密性の高いスコープであるため、公開された外部アプリにはOAuthアプリの完全な検証が必要になる場合があり、短縮できる待ち時間よりも審査に時間がかかる可能性があります。

    社内ツールにはInternalがより適したデフォルトです。検証のリスクを承知のうえで早期審査を利用する価値がある場合に限り、Externalを選んでください。

次に、~/.adwarp/google.json を作成します。

{
  "clientId": "....apps.googleusercontent.com",
  "clientSecret": "...",
  "developerToken": "...",
  "loginCustomerId": "1234567890",
  "defaultCustomerId": "0987654321",
  "defaultConversionActionNames": ["Demo Booked"]
}

loginCustomerId はマネージャーアカウントを指定するもので、そこを経由して対象アカウントにアクセスする場合にのみ必要です。adwarp google auth login を実行すれば、セットアップは完了です。 ドキュメントのGoogle Adsのセットアップにも同じ手順が記載されています。また、ADWARP_GOOGLE_* 環境変数についても説明しています。

パッケージ

  • @adwarp/shared:プラットフォームに依存しないレイヤーです。OAuth、認証情報ストア、再試行ポリシー、変更ジャーナル、期間と KPI の計算を提供します。
  • @adwarp/core:LinkedIn REST クライアント、リソースモジュール、CSV と SHA256 のハッシュ処理、Salesforce および HubSpot のリーダーを提供します。
  • @adwarp/google:Google Ads REST クライアント、GAQL による読み取り、アトミックな変更ビルダー、検索キャンペーンの作成機能を提供します。
  • @adwarp/mcp:MCP サーバー(ローカルでは stdio を使用し、ホスト型アプリでも再利用されます)。主要なインターフェースです。
  • @adwarp/cli:同じエンジンを使う adwarp CLI です。スクリプトによるバッチ実行に使用します。
  • @adwarp/web:Vercel 上で MCP を HTTP 経由でホストする Next.js アプリです。エンドポイントは https://mcp.adwarp.dev/api/mcp です。ページは提供せず、それ以外のパスは adwarp.dev にリダイレクトします。
  • adwarp:公開されている npm パッケージです。CLI と MCP サーバーを adwarp、adwarp-mcp、liam コマンドで実行できるようにまとめています。

仕組み

どちらのインターフェースも、同じエンジンを利用する薄いレイヤーです。すべての MCP ツールと CLI コマンドは、createLinkedInAds()(core/src/client.ts)を使ってクライアントを構築します。この関数は設定と自動更新される OAuth トークンプロバイダーを読み込み、その後、型付きリソースモジュール(campaigns.ts、audience.ts、report.ts など)を呼び出します。各モジュールは、バージョン指定された LinkedIn の REST API(設定で LinkedIn-Version を固定)をラップします。入力の形状は core/src/schemas.ts の zod スキーマに定義され、MCP ツールの入力スキーマとしてそのまま再利用されるため、CLI と MCP が食い違うことはありません。

下書きを優先する安全ルールは、作成時に適用されます。キャンペーングループ、キャンペーン、クリエイティブのステータスはデフォルトで DRAFT になり、公開するには常に明示的なリクエストが必要です(status に ACTIVE を指定する、campaigns update --status ACTIVE --apply を実行する、または ad resume --apply を実行する)。Google では、有効なステータスを指定できる作成スキーマ自体がありません。また、すべての書き込みは 1 つの HTTP チョークポイントを経由し、後でリフト分析を行えるよう、ローカルの変更ジャーナル(~/.adwarp/changelog.jsonl)に追記されます。

AGENTS.md には、アーキテクチャに関する詳細と、ライブテストで判明した LinkedIn API の注意点(restli エンコーディング、必須フィールド、DMP オーディエンスのフロー)が記載されています。

インストール

adwarp.dev のインストールガイドにも同じ手順が記載されており、各クライアント向けのセットアップページもあります。Claude Code、Claude Desktop、Cursor、Codex、Gemini、CLI、およびご自身のエンドポイントを使うMeta MuseとGrok Botをご覧ください。

Adwarp のインストール方法は 2 つあります。

  1. MCP サーバーとして:Claude Code、Claude Desktop、Cursor、Codex、またはローカルサーバーを実行できるその他の MCP クライアントに登録し、アシスタントとの対話でキャンペーンを作成します。ローカルで実行するか、常時稼働の環境へのインストールを省略し、ご自身の認証情報を使ってホスト型エンドポイントに接続することもできます。
  2. ターミナル CLI として:ターミナル、スクリプト、または cron からすべてを実行するためのグローバルな adwarp コマンドです。

どちらもご自身の LinkedIn デベロッパーアプリを使用するため、認証情報と広告アカウントはご自身のものです。どちらも同じ npm パッケージ adwarp から提供されます。最初の 2 つの手順は共通です。LinkedIn アプリを作成し(手順 0)、認証します(手順 1)。その後、どちらか一方を選ぶか、両方を使えます。どちらも同じ ~/.adwarp の認証情報を読み込みます。

ステップ 0:LinkedIn アプリを作成する(初回のみ)
  1. https://www.linkedin.com/developers/apps でアプリを作成します。会社の LinkedIn ページに関連付ける必要があります。

  2. Products タブでアクセスを申請します。

    製品用途必須か
    Advertising APIキャンペーン、広告、ターゲティング、レポート、コンバージョンはい
    AudiencesCSV 形式の連絡先/会社リストをマッチドオーディエンスとしてアップロードオーディエンスのアップロード時のみ
    LinkedIn Ad Library公式 API を介した競合広告のメタデータ競合の検索に必須。ブラウザーでの代替手段はありません
  3. Auth タブで、認証済みリダイレクト URL として http://localhost:53682/callback を追加し、Client ID と Client Secret を控えます。

  4. Advertising API の承認後、Products → Advertising API → View Ad Accounts で広告アカウントを関連付けます。これを省略すると、accounts list の結果が空になります。

OAuth スコープ。 adwarp auth login は、rw_ads(キャンペーンの作成と編集)、r_ads_reporting(レポート)、rw_conversions(コンバージョントラッキング)、および w_organization_social(画像広告では、LinkedIn ページが所有する投稿を作成します)を要求します。後から製品やスコープを追加した場合は、もう一度 auth login を実行してください。トークンを更新しても、最初に許可したスコープだけが保持されます。

ステップ 1:認証する(初回のみ、どちらの方法でも)

Node.js 20 以降が必要です。

# App credentials (alternatively set ADWARP_LINKEDIN_CLIENT_ID / ADWARP_LINKEDIN_CLIENT_SECRET env vars)
mkdir -p ~/.adwarp
echo '{ "clientId": "...", "clientSecret": "...", "linkedinVersion": "202605" }' > ~/.adwarp/config.json

npx -y adwarp auth login      # opens the browser; tokens land in ~/.adwarp
npx -y adwarp accounts list   # verify, then set defaultAccountId in config.json
オプション 1:MCP サーバーとしてインストールする

MCP クライアントにサーバーを登録します。ステップ 1 で設定した ~/.adwarp の認証情報が読み込まれます。

Claude Code

claude mcp add adwarp -- npx -y adwarp mcp

Claude Desktop、Cursor、またはローカルサーバーを実行できるその他の MCP クライアントで、クライアントの MCP 設定 JSON に以下を追加します。

{
  "mcpServers": {
    "adwarp": { "command": "npx", "args": ["-y", "adwarp", "mcp"] }
  }
}

adwarp mcp と adwarp-mcp コマンドは、同じサーバーを起動します。Docker を使う場合は、ルートの Dockerfile で同じサーバーのイメージをビルドできます。Docker で実行するをご覧ください。

動作確認として、読み取り専用のリクエストを試してください。「広告アカウントを一覧表示して」または「過去 30 日間のアカウントの実績はどうでしたか?」と尋ねます。

ホステッド MCP:独自の認証情報で接続、デプロイは不要

ホステッド MCP サーバーは次の場所にあります。

https://mcp.adwarp.dev/api/mcp

このサーバーはマルチテナントで、認証情報を持ち込む方式です。リクエストヘッダーで LinkedIn の開発者アプリの詳細を渡すと、すべての呼び出しがお客様のアプリとお客様の広告アカウントに対して実行されます。サーバーはお客様の状態を保持しません。認証情報は LinkedIn への呼び出しにメモリー上で使用され、ログに記録されたり永続化されたりすることはありません。元のアドレス https://liam-mcp.vercel.app/api/mcp も引き続き利用でき、同じエンドポイントを提供するため、既存の接続を変更する必要はありません。詳細については、ホステッドエンドポイントのドキュメントをご覧ください。

ヘッダー値必須?
X-Adwarp-Linkedin-Client-IdLinkedIn アプリの Client IDはい
X-Adwarp-Linkedin-Client-SecretLinkedIn アプリの Client Secretはい
X-Adwarp-Linkedin-Refresh-Tokenauth login で取得したリフレッシュトークン(約 365 日)はい
X-Adwarp-Linkedin-Account-Id呼び出しで広告アカウント ID が省略された場合に使用する数値の広告アカウント IDいいえ
X-Adwarp-Linkedin-VersionAPI バージョンの固定指定(YYYYMM)。省略時はサーバーのバージョンが使用されますいいえ

上記のステップ 0 とステップ 1(LinkedIn アプリの設定とローカルでの auth login)は、一度だけ実行してください。LinkedIn の OAuth 同意はブラウザーで行う必要があるため、トークンの発行がローカルで行う唯一の手順です。 次に、すぐに実行できる接続コマンドを出力します。

npx -y adwarp auth export --mcp
# claude mcp add --transport http adwarp https://mcp.adwarp.dev/api/mcp \
#   --header "X-Adwarp-Linkedin-Client-Id: …" \
#   --header "X-Adwarp-Linkedin-Client-Secret: …" \
#   --header "X-Adwarp-Linkedin-Refresh-Token: …" \
#   --header "X-Adwarp-Linkedin-Account-Id: …"

カスタムヘッダーを送信できる他の MCP クライアントも、同じ方法で接続できます(ネイティブの HTTP トランスポートがないクライアントの場合は、npx mcp-remote <url> --header "X-Adwarp-Linkedin-Client-Id: …" … を使用します)。読み取り専用の呼び出し(「自分の広告アカウントを一覧表示する」)で動作を確認すれば、それ以降は URL とヘッダーだけで接続できます。このリポジトリを一度もクローンしていないマシンからも利用できます。

トレードオフも把握しておいてください。クライアントシークレットとリフレッシュトークンはリクエストのたびにそのサーバーへ送信されるため、信頼できるデプロイ先だけを指定するか、同じエンドポイントをセルフホストしてください(次のセクションを参照)。広告を管理するスコープは広告の配信開始にも使用できるため、これらの認証情報は広告アカウントのパスワードと同様に扱ってください。

ホステッド版の制限事項(いずれも設計上のものです。ローカルリソースが必要です):upload_audience_csv はサーバー上の CSV パスを読み込みます。audience_from_salesforce にはローカルの sf CLI が必要です。audience_from_hubspot はホステッド版には登録されていません(HubSpot トークンはお使いのマシンに保持されます)。競合他社の広告のスクレイピングは API のメタデータのみを使用する方式にフォールバックします(ブラウザーは使用しません)。また、変更ジャーナルとリフト測定ツールにはローカルの ~/.adwarp/changelog.jsonl が必要です。これらはローカルの MCP サーバーまたは CLI から実行してください。

スキルを追加しましょう。 チーム向けの明確な役割分担は、MCP クライアントの設定に認証情報(上記のヘッダー)を保存し、小さなスキルまたはシステムプロンプトに運用手順を記述することです。たとえば、デフォルトの広告アカウント、命名規則、常設の除外設定、「オーディエンス拡張は常にオフ」のような運用ルールです。有料広告スキルは実例です。1 つをコピーしてデフォルトを差し替えれば、アシスタントがそのルールに従ってホステッドツールを操作します。認証情報をスキルファイルに記載してはいけません。

Vercel で同じエンドポイントをセルフホストする

認証情報が共有インフラに触れることのないよう、ご自身のインスタンスを実行できます。また、環境変数で設定するプライベートテナントも利用できます。

  1. 環境変数の値をローカルで取得します:npx -y adwarp auth export。
  2. apps/web を Vercel にデプロイします(プロジェクトの Root Directory を apps/web に設定してください)。
  3. Vercel のプロジェクト設定で、auth export に表示された環境変数を追加します (ADWARP_LINKEDIN_CLIENT_ID、ADWARP_LINKEDIN_CLIENT_SECRET、ADWARP_LINKEDIN_REFRESH_TOKEN、ADWARP_LINKEDIN_VERSION、 および強力な MCP_AUTH_TOKEN)。Vercel の Deployment Protection 設定で、本番環境の Vercel Authentication を無効にするか、保護バイパス用のシークレットを追加してください。そうしないと、MCP クライアントがエンドポイントにアクセスできません。
  4. MCP エンドポイントは https://<your-app>.vercel.app/api/mcp です。ヘッダーにシークレットを指定して接続します:
claude mcp add --transport http adwarp https://<your-app>.vercel.app/api/mcp \
  --header "Authorization: Bearer <MCP_AUTH_TOKEN>"

MCP_AUTH_TOKEN を含むリクエストでは、環境変数の認証情報(ご自身のテナント)が使用されます。上記の X-Adwarp-Linkedin-* ヘッダーを含むリクエストでは、呼び出し元の認証情報が使用されるため、セルフホストした 1 つのインスタンスをチーム全体で利用し、各メンバーがそれぞれの LinkedIn アプリを使用できます。このアプリが提供するのはエンドポイントのみです。/ や /docs など、その他のパスは adwarp.dev にリダイレクトされます。

オプション 2:ターミナル CLI をインストールする

adwarp コマンドを使えるようにパッケージをグローバルにインストールするか、npx -y adwarp <command> を使って任意のコマンドを個別に実行します:

npm install -g adwarp
adwarp accounts list

Liam から移行する場合:liam は引き続き adwarp のエイリアスとして使えます。パッケージは両方の名前をインストールするため、既存のスクリプトや cron ジョブもそのまま動作します。

最初のセッションには、次の手順がおすすめです:

adwarp targeting search titles "demand generation"   # resolve targeting URNs
adwarp report summary -p last_30_days                # account rollup + flags
adwarp launch --brief examples/brief.json            # creates DRAFTS only

以下に、CLI リファレンスの全内容を記載しています。

ソースから

コントリビューター向け、または未リリースの変更を実行する場合に使用します。git と pnpm も必要です。

git clone https://github.com/adwarp-dev/adwarp.git
cd adwarp
pnpm install && pnpm -r build

node packages/cli/dist/index.js accounts list
claude mcp add adwarp -- node /abs/path/adwarp/packages/mcp/dist/index.js
または、このプロンプトを貼り付けてアシスタントにセットアップを任せる

ブロック全体を Claude(またはターミナルにアクセスできる高性能なアシスタント)にコピーすると、上記のすべての手順を順番に案内してくれます:

You are helping me set up Adwarp, an open-source LinkedIn Ad Manager from
https://github.com/adwarp-dev/adwarp. It runs locally as an MCP server and a CLI,
both from the npm package "adwarp".
Everything it creates on LinkedIn starts as a draft, so nothing spends money until I
explicitly turn it on.

Walk me through the setup one step at a time. Run commands for me where you can,
show me exactly what to click where you cannot, and wait for my confirmation
before moving to the next step.

1. Check that Node.js 20 or newer is installed. Help me install it if it is
   missing.
2. Help me create a LinkedIn developer app at
   https://www.linkedin.com/developers/apps (it must be associated with my
   company's LinkedIn Page):
   a. On the Products tab, request access to the "Advertising API" product.
      This is the only required product; approval can take a while.
   b. Optional: also request "Audiences" if I want to upload CSV contact or
      company lists as matched audiences.
   c. Optional: also request "LinkedIn Ad Library" if I want competitor ad
      metadata through the official API.
   d. On the Auth tab, add http://localhost:53682/callback as an authorized
      redirect URL, and show me where the Client ID and Client Secret live.
3. Create ~/.adwarp/config.json containing my clientId, clientSecret, and
   "linkedinVersion": "202605".
4. Run "npx -y adwarp auth login". My browser opens LinkedIn's
   consent screen; after I approve, tokens are stored in ~/.adwarp/credentials.json.
5. Verify with "npx -y adwarp accounts list". If no accounts
   show up, remind me to map my ad account in the Developer Portal under
   Products > Advertising API > View Ad Accounts. Then set my account id as
   "defaultAccountId" in ~/.adwarp/config.json.
6. Register the MCP server with the assistant I use:
   - Claude Code: claude mcp add adwarp -- npx -y adwarp mcp
   - Claude Desktop or another client: add {"command": "npx", "args":
     ["-y", "adwarp", "mcp"]} under mcpServers in its config.
7. Confirm the tools load, then show me one read-only call working, for example
   list_ad_accounts or a last_30_days performance summary.

If any step fails, show me the exact error and fix it with me before moving on.

スキル

17 個の有料広告スキルは、Adwarp のツールをプレイブックに変えます。取得するデータ、評価方法、重要な基準、そして優先順位付きのアクションで締めくくるレポートの作成方法をまとめています。Adwarp をインストールせず、CSV エクスポートから実行することもできます。分析スキルは読み取りのみを行います。アカウントを変更するスキルは、確認後に下書きまたは一時停止中のエンティティを作成します。

  • LinkedIn Ads: アカウント監査、パフォーマンスレビュー、支出分析、リードの要因分析、一時停止ルール、オーディエンス規模の推定、オーディエンス運用、ABM ビルダー、安全策付きローンチ、広告ライブラリ分析
  • Google Ads: アカウント監査、検索キャンペーンビルダー、検索語句
  • 両プラットフォーム: 週次レポート、日次ヘルスチェック、実験リフト、予算消化ペース
npx skills add adwarp-dev/paid-ads-skills

以前 skills/ にあった 11 個の adwarp-* スキルは、新しい名前で移動しました。各フォルダーは新しいスキルを参照するため、既存のインストールも引き続き動作します。移動内容の全リストはスキルのドキュメントをご覧ください。

ツール(MCP)

ツールリファレンスには、すべてのツールとその入力、およびホスト型エンドポイントで動作するかどうかが記載されています。

  • アカウント: list_ad_accounts
  • ターゲティング: list_targeting_facets、search_targeting(エンティティ URN を検索するファセットの入力補完)、list_facet_entities、estimate_audience(構造化仕様)。「米国の SaaS 企業でデマンドジェネレーションを担当する VP」のように自然な言葉で指定すると、Adwarp がファセットを解決し、キャンペーンを作成する前にリーチを推定します。
  • オーディエンス: upload_audience_csv(CSV を自動でクリーンアップします。列名を正規化し、マッチングに使わない列を削除し、メールアドレスをハッシュ化し、会社ドメインをウェブサイト URL に変換します。連絡先リストと会社リストの両方に対応)、audience_from_salesforce(SOQL からマッチング済みオーディエンスを作成)、audience_from_hubspot(HubSpot のリストまたは検索からマッチング済みオーディエンスを作成。ローカルのみ)、get_audience_status
  • コンバージョン: list_conversions(トラッキングする既存のインサイトタグ・コンバージョンを選択)。create_campaign と launch_from_brief では conversionIds または conversionName を指定でき、指定がない場合は設定の defaultConversionName が使用されます。
  • キャンペーン: create_campaign_group、create_campaign、create_text_ad、create_image_ad、list_campaigns(アカウント構造:キャンペーングループとその広告グループ。下書きも含みます。支出のあるエンティティのみを表示するレポートとは異なります)、list_ads、delete_ad(クリエイティブと、可能な場合はそのダイレクトスポンサードコンテンツの投稿を削除)、update_ad(1 つの広告を一時停止、再開、またはアーカイブします。ACTIVE は支出を開始するため、明示的な要求がある場合にのみ設定されます)。LinkedIn のエディターでは配信中の広告の投稿を編集できないため、コピーを変更するには、広告を作り直します:delete_ad + create_image_ad。
  • オーケストレーター: launch_from_brief(オーディエンス、グループ、キャンペーン、下書きクリエイティブを 1 回の呼び出しで作成)
  • レポート: performance_summary(アカウント全体の集計、上位/下位、フラグ)、get_performance(任意の階層のエンティティごとの KPI)、performance_trend(差分を含む週次/月次の推移)。KPI:CTR、CPC、CPM、CPL、コンバージョン率、コンバージョン単価。階層:campaign_group、campaign、creative。
  • 競合インテリジェンス: inspect_competitor_ads は、メタデータの取得に公式の Ad Library API を使用します。また、auto モードでは、クリエイティブのコピーやスクリーンショットを取得するために、任意でリモートワーカーを使用します。CLI も MCP コードもローカルブラウザーを起動したり、API が失敗したときにスクレイピングへフォールバックしたりすることはありません。幅広い API マッチをクリエイティブのキュー登録前に絞り込むには、advertiser と companyId の両方を指定してください。api モードで取得できるのはメタデータのみです。auto モードでは最大 10 件の広告がキューに登録され、キャッシュ済みの結果またはジョブのステータスが返されます。完了したジョブの結果を確認するには、get_competitor_creatives / adwarp creative-status <ids> を使用してください。ワーカーはキャッシュ、キュー、期間内の予算、ブロック状態を保持します。デプロイと設定については、リモートクリエイティブワーカーを参照してください。
  • 変更履歴とリフト: log_ad_change(変更を記録)、list_ad_changes、compute_lift(記録された変更ごとに変更前後のパフォーマンスを比較)。Adwarp は実行したすべての変更を自動的に記録します。詳細は以下の変更履歴とリフトを参照してください。
ターゲティング仕様

構造化ターゲティングでは、短いファセット名をエンティティ URN に対応付けます(URN は search_targeting で解決します)。同じファセット内の URN は OR 条件、ファセット間は AND 条件となり、除外するファセット同士は OR 条件になります。

{ "include": { "locations": ["urn:li:geo:103644278"], "seniorities": ["urn:li:seniority:7"], "titles": ["urn:li:title:26587"] },
  "exclude": { "industries": ["urn:li:industry:47"] } }

CLI リファレンス

すべてのコマンドは npx -y adwarp <cmd> でも実行できます。CLI ドキュメントには、Google Ads のコマンドを含む全コマンドが記載されています。

adwarp auth login                         # OAuth, stores tokens in ~/.adwarp
adwarp auth export                        # print env vars for a self-hosted (Vercel) server
adwarp auth export --mcp                  # print the hosted-MCP connect command with your headers
adwarp accounts list                      # list accessible ad accounts
adwarp targeting search <facet> <query>   # typeahead a facet for entity URNs
adwarp targeting estimate <facet> <urns…> # audience size for one facet's URNs
adwarp audience upload -n <name> -f <csv> # clean + upload a CSV as a matched audience
adwarp audience upload -n <name> -f <csv> --dry-run   # preview the cleaned CSV, no upload
adwarp audience from-salesforce -n <name> -q "<SOQL>"   # Salesforce query -> matched audience
adwarp audience from-hubspot -n <name> --list <id> [--dry-run]   # HubSpot list -> matched audience
adwarp audience from-hubspot -n <name> --filter <prop>:<op>:<value> [-t company]   # HubSpot search -> matched audience
adwarp audience status <segmentId>        # matching status + resolved size
adwarp conversions list                   # account conversions (pick one to track)
adwarp campaigns list [--group <id>] [--all]   # campaign groups + ad groups, drafts included
adwarp ad list <campaignId>               # ads in an ad group (id, status, name), drafts included
adwarp ad delete <creativeId>             # delete an ad (creative + its DSC post)
adwarp ad pause <creativeId> [--apply]    # pause a single ad, previews unless --apply
adwarp ad resume <creativeId> [--apply]   # set an ad ACTIVE again (starts spend), previews unless --apply
adwarp ad archive <creativeId> [--apply]  # archive an ad, previews unless --apply
adwarp report summary [-p <period>]       # account rollup: totals, top performers, flags
adwarp report perf <level> [--parent <id>] # per-entity KPI rows
adwarp report trend <level> <id> [-b weekly|monthly]  # trend with deltas
adwarp launch --brief <brief.json>        # audience + group + campaign + draft creatives
adwarp competitor ads <advertiser>        # any company's ads from the public Ad Library
                                        #   <advertiser> = name, company id, or company URL
                                        #   -k <keyword> -c <countries> -e auto|api -m <max> --json
                                        #   --company-id <id> --copy-max <n> (remote sample, max 10)
adwarp changelog list [-t <type>] [-i <id>]           # recorded ad changes, newest first
adwarp changelog add -t <type> -i <id> -f <field> --after <v> [-l <label>]   # log a change made elsewhere
adwarp lift <level> <id> [-w <days>]      # before-vs-after performance for each recorded change

期間:last_7_days、last_30_days、last_90_days、month_to_date、last_month。

該当する場合、--account のデフォルト値には設定の defaultAccountId が使用されます。

変更ジャーナルとリフト

Adwarp は、広告エンティティに加えられたすべての変更を追記専用のジャーナルに記録します。これにより、変更前と変更後の期間でパフォーマンスがどう異なったかを測定し、変更のリフトを確認できます。

  • 保存場所: ~/.adwarp/changelog.jsonl(1 行につき JSON オブジェクト 1 つ)。設定不要のローカルファイルです。ADWARP_CHANGELOG_PATH でパスを上書きできます。
  • 自動記録: Adwarp がキャンペーングループ、キャンペーン、クリエイティブを作成または更新すると、その内容が自動的にジャーナルに記録されます(HTTP リクエストが通る唯一の箇所で取得するため、記録漏れはありません)。
  • 手動記録: Adwarp 以外で行った変更(例:Campaign Manager での変更)を記録したり、仮説を添えたりするには、adwarp changelog add または log_ad_change ツールを使用します。-l/--label でテストに名前を付け(例:"outcome-led headline test")、--tags で関連する変更をグループ化できます。
  • リフト: adwarp lift <level> <entityId>(または compute_lift)は、そのエンティティのジャーナルを読み込み、変更ごとに --window 日(デフォルトは 14 日)の変更前と同じ期間の変更後を比較します。変更前後の KPI と指標ごとの差分(CTR、CPC、コンバージョン率、コンバージョン単価など)を報告します。最近の変更では、変更後の期間を短縮して partial と表示します。

これは統制された実験ではなく、変更前後の傾向を比較するものです。季節性、編集後の LinkedIn の学習フェーズ、同時に行われた予算変更の影響を受けるため、差分は参考情報として扱ってください。ADWARP_NO_CHANGELOG=1 を設定すると自動記録を無効にできます。ホスト型のデプロイでは、ジャーナルへの記録も無効になります(ファイルシステムが読み取り専用のため)。

設定

ローカル設定は ~/.adwarp/config.json に保存されます(モード 0600、リポジトリには保存されません)。

フィールド用途
clientId, clientSecretLinkedIn アプリの認証情報(または ADWARP_LINKEDIN_CLIENT_ID/ADWARP_LINKEDIN_CLIENT_SECRET)
linkedinVersion固定する API バージョン。例:202605
defaultAccountIdコマンドまたはブリーフでアカウントが指定されていない場合に使用する広告アカウント
defaultConversionName新しいキャンペーンでコンバージョンが指定されていない場合に自動選択するコンバージョン
mcpAuthTokenホスト型 MCP エンドポイント用のベアラーシークレット

ホスト型のデプロイでは、ADWARP_LINKEDIN_* 環境変数と MCP_AUTH_TOKEN を使用します(設定を参照)。 OAuth トークンは ~/.adwarp/credentials.json に別途保存されます。HubSpot オーディエンス用の HubSpot プライベートアプリトークンは、~/.adwarp/hubspot.json(モード 0600)または ADWARP_HUBSPOT_TOKEN に設定します。

Liam から移行する場合も、名称変更前の名前はすべて引き続き使用できます。~/.liads フォルダー、LIADS_* および GADS_* 変数、X-Liads-* ヘッダーが対象です。名称変更前の名前を参照してください。

Salesforce 連携

Adwarp は、認証済みの sf CLI(sf data query)を呼び出して Salesforce のデータを読み取るため、既存のログイン情報を再利用でき、新しい認証情報は不要です。audience_from_salesforce(および adwarp audience from-salesforce)にメール列を選択する SOQL クエリを渡すと、結果をマッチドオーディエンスに変換できます。これにより、「Salesforce でフラグが付いたアカウント」から「LinkedIn のターゲティング」までをつなげられます。例:

adwarp audience from-salesforce -n "Q3 target accounts" \
  -q "SELECT Email FROM Contact WHERE Account.Target_List__c = true AND Email != null"

HubSpot 連携

Adwarp は、HubSpot アカウントで作成したプライベートアプリのアクセストークンを使用して HubSpot のデータを読み取ります。必要なスコープは、読み取り専用の次の 3 つです:crm.objects.contacts.read、crm.objects.companies.read、crm.lists.read。トークンは ~/.adwarp/hubspot.json に { "accessToken": "..." } として設定するか(モード 0600)、ADWARP_HUBSPOT_TOKEN に設定します。audience_from_hubspot(および adwarp audience from-hubspot)に HubSpot のリスト ID または CRM の検索フィルターを渡すと、すべてのページを読み込み、CSV アップロードと同じ方法でデータをクリーニングしてハッシュ化し、連絡先または企業をマッチドオーディエンスに変換します。そのため、メールアドレスのハッシュのみがマシンの外部に送信されます。これはローカルでのみ実行されます。例:

adwarp audience from-hubspot -n "Q3 target accounts" --list 123 --dry-run
adwarp audience from-hubspot -n "Marketing qualified leads" --filter lifecyclestage:EQ:marketingqualifiedlead

プライベートアプリの作成方法と制限については、HubSpot オーディエンスを参照してください。

安全性

  • すべてのキャンペーン/クリエイティブは DRAFT/PAUSED として作成されます。有効化は独立した明示的な手順です。
  • マッチしたオーディエンスの照合には最大48時間かかり、キャンペーンの配信にはマッチしたメンバーが約300人必要です。
  • LinkedInでは個人単位の広告閲覧データは公開されません。相互参照できるのはアカウント/セグメント単位です。
  • シークレットをリポジトリに保存することはありません。ローカルでは ~/.adwarp、ホスト環境では Vercel の環境変数を使用します。

ドキュメント

ドキュメントは adwarp.dev/docs にあります。 インストール、 LinkedIn アプリの作成、 ホストされたエンドポイント、ツール、 スキル、CLI、 変更履歴、安全性、 設定を参照してください。

ソースはこのリポジトリの docs/ にプレーンな Markdown として格納されています。トピックごとに1ファイルで、それぞれに title、description、order のフロントマターがあります。ウェブサイトは main ブランチからこれらのファイルを読み込むため、動作に変更があった場合は編集してください。ドキュメントファイル間のリンクは相対パス(./install.md)のままにしてください。ウェブサイト側で独自のページリンクに変換されます。

docs/tools.json には、各 MCP ツールの説明、入力スキーマ、プラットフォーム(linkedin または google)、およびホストされたエンドポイントで動作するかどうか(hosted、hostedSupport、hostedNote)が記載されています。実際のツール登録コードから生成されるため、手動で編集しないでください。ツールを追加、削除、変更した場合(zod の入力スキーマを含む)は、次を実行してください。

pnpm gen:tools   # builds @adwarp/mcp and its dependencies, then rewrites docs/tools.json

その結果をコミットしてください。CI でも同じコマンドが実行され、docs/tools.json に変更があると失敗します。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。