Claude Codeと広告APIを連携する完全ガイド|MCPとPython実装手順まとめ
結論:Claude Code×広告APIは、MCPとPython連携で「半自動運用」が最適解
Claude CodeとGoogle広告やFacebook広告などの各種広告APIを連携すると、レポート作成、自動入札調整、クリエイティブ案出しなど、多くの作業を半自動化できます。本記事では、MCP(Model Context Protocol)とPythonスクリプトを使って広告APIと安全に連携する手順を、実装寄りに整理して解説します。
「Claude Codeで広告運用を自動化したい」「APIは触ったことがあるが、Claudeとのつなぎ方がわからない」という方に向けて、設定フロー・実装サンプル・運用時の注意点まで体系的にまとめました。
Claude Codeと広告API連携の全体像
Claude Code × 広告API連携とは?
Claude Codeと広告API連携とは、AI開発環境であるClaude Codeから、Google Ads APIやFacebook Marketing APIなどの広告プラットフォームのAPIを呼び出し、入札価格や予算、広告文、レポート取得などを自動・半自動で行う仕組みのことです。
MCPやPythonを間に挟むことで、以下のようなワークフローが実現できます。
- Claude Code上で「昨日のキャンペーン別CPAを一覧にして」と指示 → 広告APIからデータ取得 → テーブルやグラフで整形
- 「CPAが目標の1.5倍以上のキャンペーンは入札を10%下げて」と指示 → 条件にマッチするキャンペーンを抽出 → API経由で自動調整
- 「今週の成果をクライアント向けレポートに要約して」と指示 → データ取得+自然言語によるサマリ生成
MCPとは何か?なぜ使うのか
MCP(Model Context Protocol)とは、ClaudeのようなAIモデルに対して、外部ツールやAPIを安全に接続するための標準プロトコルです。Claudeにとっての「プラグイン」「拡張機能」のような役割を担います。
MCPを使う利点は次の通りです。
- 安全性:アクセス可能なエンドポイントや引数を明示的に制御できる
- 再利用性:一度定義したMCPサーバを、複数のプロジェクトやワークスペースで使い回せる
- 抽象化:広告APIの複雑なパラメータを、Claudeから扱いやすい形にラップできる
そのため本記事では、MCP + Pythonで広告APIをラップし、Claude Codeから簡単に呼べる構造を前提に解説します。
前提準備:必要なアカウント・環境
1. 広告プラットフォーム側の準備
まずは各広告プラットフォームのAPIを利用できる状態にします。例として代表的なものを挙げます。
- Google広告(Google Ads API)
- Google Cloudプロジェクトの作成
- Google Ads APIの有効化
- OAuthクライアント(Web/デスクトップ)またはサービスアカウントの発行
- Developer Tokenの申請・承認
- Meta広告(Facebook / Instagram, Marketing API)
- Meta for Developersアカウント作成
- アプリ作成とMarketing API有効化
- アクセストークン・System Userの発行
- X広告(旧Twitter Ads API)
- Developerアカウント審査
- アプリ作成とAPIキー・トークン取得
それぞれのプラットフォームで「APIクライアントID・シークレット」「アクセストークン」「リフレッシュトークン」等を取得し、.envやSecret Managerに安全に保管しておきます。
2. 開発環境(Claude Code + ローカル/クラウド)
Claude Codeは、コード支援に特化したClaudeのモード/環境です。実際に広告APIにアクセスする処理は、以下いずれかの環境で動作させます。
- ローカルPC(Python実行環境 + MCPサーバ)
- クラウドランタイム(例:Railway, Render, Cloud Run, Vercelなど)
最低限必要なものは次の通りです。
- Python 3.10+(推奨)
- パッケージマネージャ(pip / uv / poetryなど)
- Git(バージョン管理とデプロイ用)
実装パターンの比較:MCP vs 直接Python
広告API連携の代表的な構成
| 構成 | 概要 | メリット | デメリット | おすすめ用途 |
|---|---|---|---|---|
| MCP + Python(推奨) | Pythonで広告APIクライアントを実装し、MCPサーバとして公開。Claude CodeからMCPツールとして呼び出す。 | 権限範囲を絞れる/再利用しやすい/Claudeから自然言語で柔軟に操作できる | 初期実装コストがやや高い | 運用を見据えた半自動化ワークフロー |
| 直接Pythonスクリプトのみ | Claude Codeはコード生成だけ行い、実行はローカル/サーバ上のPythonスクリプトで実施 | 実装がシンプル/既存スクリプトを流用しやすい | 都度コードを実行する必要/対話的な自動運用には不向き | 単発のレポート生成や一括編集 |
| サーバレス関数 + Webhook | Cloud FunctionsやLambdaで広告API処理を実装し、ClaudeからはHTTP経由で叩く | スケールしやすい/他のシステムとも連携しやすい | インフラ構築の知識が必要/MCPよりもセットアップが重い | 大規模アカウント・複数クライアント運用 |
どのパターンを選ぶべきか
小〜中規模の広告運用で、「まずはClaudeから安全にAPIを触れるようにしたい」というケースでは、MCP + Python構成が最もバランスが良くおすすめです。
既にPythonで広告運用スクリプトを持っている場合は、まずはそのコードをClaude Codeに読み込ませて、コードリファクタリングや関数化を手伝ってもらうのも有効です。その上で、よく使う部分だけをMCPツールとして切り出すとスムーズです。
ステップ別:Claude Codeと広告APIをつなぐ実装フロー
ステップ1:Pythonで広告APIクライアントを実装
まずは、Pythonで広告APIを叩く最小構成のスクリプトを用意します。ここでは例として、Google Ads APIで前日のキャンペーン指標を取得するイメージコードを示します(実運用では公式SDKやドキュメントを参照してください)。
from google.ads.googleads.client import GoogleAdsClient
from datetime import date, timedelta
# 認証情報の読み込み(google-ads.yaml など)
client = GoogleAdsClient.load_from_storage("google-ads.yaml")
def fetch_campaign_metrics(customer_id: str):
ga_service = client.get_service("GoogleAdsService")
yesterday = date.today() - timedelta(days=1)
query = f"""
SELECT
campaign.id,
campaign.name,
metrics.impressions,
metrics.clicks,
metrics.conversions,
metrics.cost_micros
FROM campaign
WHERE segments.date = '{yesterday}'
"""
response = ga_service.search(customer_id=customer_id, query=query)
results = []
for row in response:
results.append({
"campaign_id": row.campaign.id,
"campaign_name": row.campaign.name,
"impressions": row.metrics.impressions,
"clicks": row.metrics.clicks,
"conversions": row.metrics.conversions,
"cost": row.metrics.cost_micros / 1_000_000, # 円などに換算
})
return results
if __name__ == "__main__":
customer_id = "123-456-7890"
print(fetch_campaign_metrics(customer_id))
この段階では、「Python単体で広告APIが正しく叩けるか」を確認することが重要です。エラー処理やレートリミット対応なども、まずはこのレイヤーで実装しておきます。
ステップ2:MCPサーバとしてツール化する
次に、上記のPython関数をMCPサーバとして公開し、Claude Codeから呼べるようにします。MCPサーバは、JSON-RPCベースで「ツールの定義」と「実行処理」を提供する小さなサービスです。
実装イメージとしては以下のようになります(実際のコードは利用するMCPフレームワークに合わせて調整してください)。
from mcp.server import Tool, run_mcp_server
from typing import List, Dict
from google.ads.googleads.client import GoogleAdsClient
client = GoogleAdsClient.load_from_storage("google-ads.yaml")
def fetch_campaign_metrics(customer_id: str) -> List[Dict]:
# ...(前述の実装)...
pass
# ツール定義
fetch_campaign_tool = Tool(
name="fetch_campaign_metrics",
description="指定したGoogle Adsアカウントの前日のキャンペーン指標を取得します。",
input_schema={
"type": "object",
"properties": {
"customer_id": {"type": "string", "description": "Google Ads customer ID (xxx-xxx-xxxx)"}
},
"required": ["customer_id"]
}
)
@fetch_campaign_tool.handler
def handle_fetch_campaign_metrics(params):
customer_id = params["customer_id"]
return {"campaigns": fetch_campaign_metrics(customer_id)}
if __name__ == "__main__":
run_mcp_server([fetch_campaign_tool])
ポイントは以下の通りです。
- ツール名・説明・入力スキーマを丁寧に定義すると、Claudeが正しく呼び出しやすくなる
- 返り値はJSONで機械的に扱いやすい構造にする(配列・オブジェクト)
- APIキーやトークンは環境変数/設定ファイルから読み込み、コードに直書きしない
ステップ3:Claude Code側のMCP設定
MCPサーバを立ち上げたら、Claude Code側でそのサーバを「使えるツール」として登録します。具体的な手順は利用環境によって異なりますが、一般的には次のような設定になります。
# 例:Claude Codeのmcp設定ファイル(イメージ)
{
"mcpServers": {
"google_ads_mcp": {
"command": "python",
"args": ["path/to/google_ads_mcp_server.py"],
"env": {
"GOOGLE_ADS_CONFIGURATION_FILE": "/path/to/google-ads.yaml"
}
}
}
}
設定後、Claude Codeを再起動/リロードすると、「google_ads_mcp」内のツール(fetch_campaign_metrics)が利用可能になり、チャット上で自然言語からツール呼び出しが行えるようになります。
ステップ4:Claudeから実際にツールを呼び出す
設定が完了したら、Claude Code上で次のように指示します。
昨日の Google 広告アカウント「123-456-7890」のキャンペーン別のインプレッション、クリック数、コンバージョン数、コストを一覧にして、
・表形式で整形
・CVRとCPAも計算
・パフォーマンスの高い順に並び替え
までやってください。
Claudeは内部的にfetch_campaign_metricsツールを呼び出し、返ってきたJSONを元にテーブル化と指標計算、分析コメントの生成を行います。
Pythonのみでの実装パターン(MCPなし)
直接Pythonスクリプトを生成・実行する方法
MCPを使わない場合でも、Claude Codeは広告APIのコード生成・修正・デバッグに非常に役立ちます。一般的なフローは次の通りです。
- 公式SDK/APIドキュメントを提示し、「この仕様に沿ってキャンペーンレポートを取得するPythonコードを書いて」と指示
- Claude Codeが生成したコードをローカル環境で実行し、発生したエラーをそのまま貼り付けて「このエラーを解決して」と依頼
- 完成したスクリプトをcronやCloud Schedulerで定期実行し、CSVやBigQueryに保存
このパターンのメリットは、初期セットアップが簡単なことです。一方で、日常的に「会話しながら広告運用を調整する」ワークフローには向かないため、単発レポートや月次定型集計に活用すると良いでしょう。
よくある実装ユースケースと設計のポイント
ユースケース1:レポート自動生成
もっとも取り組みやすいのが、レポート自動生成です。
- 日次・週次で各キャンペーン/広告グループの指標を取得
- Claudeに「重要指標のハイライト」「異常値の検知」「要因仮説」を書かせる
- 結果をスプレッドシートやNotionに書き出す
この場合、MCPツールとしては次のような粒度が扱いやすくなります。
get_campaign_report(date_range, group_by)get_keyword_report(date_range, group_by)get_conversion_summary(date_range)
ユースケース2:入札・予算の自動調整
次の段階として、入札価格や予算を自動で微調整する仕組みを作るケースがあります。例:
- CPAが目標の2倍を超えたキャンペーン → 入札を-10%
- CVRが高く、予算消化が少ないキャンペーン → 予算を+20%
この場合、MCPツールとしては次のようなAPIを用意します。
list_campaigns(filter):条件に合うキャンペーン一覧を取得update_campaign_bid(campaign_id, bid_modifier)update_campaign_budget(campaign_id, budget_modifier)
Claude側には、「このルールに従って対象キャンペーンを抽出し、シミュレーション結果を表で示した上で、問題なければ実行して」といったプロンプトを与えることで、人間が最終確認しながら半自動調整を行えます。
ユースケース3:クリエイティブ改善アイデアの抽出
広告文やバナーのパフォーマンスデータをAPIから取得し、Claudeに改善案やABテスト案を出してもらうことも有効です。
- 見出し・説明文のCTRを比較し、「高パフォーマンスパターン」「低パフォーマンスパターン」を分類
- 高パフォーマンスパターンを元に、新しいコピー案を自動生成
- ブランドトーンや禁止表現をプロンプトに明示し、広告ポリシー違反を避ける
セキュリティ・運用上の注意点
APIキー・トークン管理
広告APIはアカウント予算や入札に直接影響するため、認証情報の管理が最重要です。
- APIキー・トークンをコードにベタ書きしない(必ず環境変数や設定ファイルで管理)
- 権限を必要最小限に絞る(読み取り専用の権限アカウントを用意するなど)
- テスト用アカウントと本番アカウントを分ける
レートリミットと失敗時リトライ
広告APIには必ずレート制限があります。MCPツール実装時には、次のような対策を組み込んでおきましょう。
- 一定回数以上の連続リクエストを制限する
- 429/5xxエラー時の指数バックオフリトライ
- Claude側には「大量データを一度に取得しない」ようプロンプトで注意書きを入れる
人間のレビューを必ず挟む
特に入札・予算変更系のツールは、誤ったプロンプトや予期せぬデータ状態で大きな変更が入るリスクがあります。
- まずは「提案モード(シミュレーション)」のみを実装し、Claudeには「変更案の一覧」を出させるだけにする
- 運用に慣れてきたら、特定条件下のみ自動実行を許可する
- 変更履歴を必ずログに残し、いつでもロールバックできるようにする
よくある質問(FAQ)
Q1. MCPを使わずに、Claudeから直接HTTPで広告APIを叩けますか?
A. 技術的にはHTTPクライアントをツールとして用意することで可能ですが、MCPを利用して広告API専用のツールを定義するほうが安全かつ管理しやすいため推奨です。特に認証やレート制限のロジックを共通化しやすくなります。
Q2. どの広告プラットフォームから対応するべきですか?
A. 運用ボリュームが大きく、レポート工数が重い媒体から優先すると効果が出やすいです。多くの場合、Google広告やMeta広告が最初の候補になります。1媒体でワークフローを固めてから、他媒体に展開するとスムーズです。
Q3. Python以外の言語でもMCPと広告API連携は可能ですか?
A. 可能です。Node.jsやTypeScriptなど、広告APIの公式SDKが提供されている言語であれば同様の構成を組めます。ただし、ドキュメントやサンプルが豊富なPythonは学習コストが低く、最初の実装には特に向いています。
Q4. 小規模アカウントでも導入メリットはありますか?
A. はい。特にレポート自動生成はアカウント規模に関わらず効果があります。手作業でExcelやスプレッドシートにコピペしている時間を削減し、分析や施策検討に時間を割けるようになります。
Q5. 広告アカウントの停止・BANリスクはありませんか?
A. 正しく実装すればリスクは低いですが、過度なリクエストやポリシー違反の広告生成はアカウント停止の原因となりえます。レートリミットと認証周りの仕様をよく確認し、クリエイティブ生成時は各プラットフォームのポリシーをプロンプトで明示してください。
まとめ:まずは「レポート+MCP」の小さな成功体験から
Claude Codeと広告APIの連携は、一見難しく感じられますが、次のステップに分解すれば着実に前進できます。
- ① Pythonで広告APIを叩く最小スクリプトを作る
- ② そのスクリプトをMCPサーバとしてラップする
- ③ Claude CodeからMCPツールを呼び出せるよう設定する
- ④ レポート生成 → 入札・予算調整 → クリエイティブ改善の順に、ユースケースを広げる
特に、レポート自動生成はリスクが低く、効果を実感しやすい領域です。まずは1つの媒体・1つのレポートから始めて、Claude CodeとMCP、Python連携のワークフローに慣れていくのがおすすめです。
実装や設計に迷ったときは、Claude Codeに既存コードやAPIドキュメントを読み込ませ、「この要件を満たすMCPツールの設計を一緒に考えて」と依頼すると、具体的な関数設計やエラー処理のパターンまで提案してくれます。
より実践的なイメージやコード例については、以下のYouTube動画も参考にしてください。