/ ディレクトリ / プレイグラウンド / Cloudflare API
● 公式 cloudflare 🔑 自分のキーが必要

Cloudflare API

作者 cloudflare · cloudflare/mcp

スコープ付きAPIトークンとドライラン習慣で、CloudflareのDNS、ゾーン、WAF、アナリティクス、WorkersをClaudeから管理できます。

CloudflareのAPI MCPは、Cloudflare REST APIの全機能をツール化します:ゾーン、DNSレコード、ページルール、ファイアウォールルール、アナリティクス、SSL、Workers、R2、KVなど。スコープ付きAPIトークン(Global API Keyではなく)を使用し、書き込み操作はインフラ変更として扱いましょう — プレビュー、適用、検証の流れで。

なぜ使うのか

主な機能

ライブデモ

実際の動作

cloudflare-api.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "cloudflare-api": {
      "command": "npx",
      "args": [
        "-y",
        "@cloudflare/mcp"
      ]
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "cloudflare-api": {
      "command": "npx",
      "args": [
        "-y",
        "@cloudflare/mcp"
      ]
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "cloudflare-api": {
      "command": "npx",
      "args": [
        "-y",
        "@cloudflare/mcp"
      ]
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "cloudflare-api": {
      "command": "npx",
      "args": [
        "-y",
        "@cloudflare/mcp"
      ]
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "cloudflare-api",
      "command": "npx",
      "args": [
        "-y",
        "@cloudflare/mcp"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "cloudflare-api": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "@cloudflare/mcp"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add cloudflare-api -- npx -y @cloudflare/mcp

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: Cloudflare API

全ゾーンのDNSレコードを監査してドリフトを検出

👤 プラットフォーム / SREチーム ⏱ ~25 min intermediate

使うタイミング: 40個のゾーンを管理しており、異常なTTL、SPF/DMARCの欠落、ダングリングCNAMEがないか確認したい場合。

前提条件
  • Zone:Zone:ReadZone:DNS:Read権限を持つAPIトークン — Cloudflareダッシュボード → マイプロフィール → APIトークン → 作成
フロー
  1. ゾーンを一覧表示し、タイプごとのレコード数を集計
    List all zones in my account. For each, count records by type (A, CNAME, TXT, MX).✓ コピーしました
    → インベントリマトリックス
  2. メール認証の健全性をチェック
    For each zone used for email, check presence of SPF (TXT containing 'v=spf1'), DMARC TXT at _dmarc, and DKIM selector TXT records. Flag missing.✓ コピーしました
    → メール認証のギャップレポート
  3. ダングリングCNAMEを検出
    For each CNAME in every zone, resolve the target. Flag NXDOMAIN or SERVFAIL as dangling.✓ コピーしました
    → リスクのあるCNAMEのリスト

結果: 各ドメインの管理チームに渡せる、ゾーンごとのDNS健全性レポート。

注意点
  • ダングリングCNAMEはサブドメインテイクオーバーのリスクがある — NXDOMAINのCNAMEは即座にエスカレーション — 削除または修正する
組み合わせ: filesystem

プレビュー/適用ワークフローでDNSレコードを追加・更新

👤 重要なDNS変更を行う前に不安がある方 ⏱ ~10 min beginner

使うタイミング: メールプロバイダーの切り替え、サービス用の新しいCNAME追加など、影響の大きいDNS変更時。

前提条件
  • 対象ゾーンのZone:DNS:Edit権限を持つトークン — 変更対象のゾーンのみにトークンのスコープを限定する
フロー
  1. 現在の状態を表示
    For zone <zone>, show every record for name '<name>' and type <type>. Proxied status and TTL.✓ コピーしました
    → 現在のレコード状態
  2. 変更を提案、まだ適用しない
    Propose a patch: <describe change>. Show the exact API call and the before/after. Do NOT execute yet.✓ コピーしました
    → プレビュー差分
  3. 確認後に適用
    I confirm. Apply the change. Then read back the record to confirm. Also flush cache for the impacted name.✓ コピーしました
    → レコード更新 + キャッシュパージ + 検証読み取り完了

結果: レビューステップと変更後の検証を含むDNS変更 — 予期しない問題が起きません。

注意点
  • プロキシ有効(オレンジクラウド)のCNAMEをメールサーバーに向けるとメールが壊れる — MX、SPF関連のCNAME、および非HTTPレコードには必ずproxied:falseを設定する

トラフィックスパイク時に緊急レート制限をデプロイ

👤 L7 DDoSや暴走クライアントに対応するSRE ⏱ ~15 min advanced

使うタイミング: トラフィックが急増してオリジンが逼迫している。数分以内に抑制する必要がある場合。

前提条件
  • 対象ゾーンのZone:Zone WAF:Edit権限を持つトークン — パスワードマネージャーに保管したインシデント対応専用トークン
フロー
  1. パターンを特定
    Pull last hour analytics for zone <zone>. Top 10 paths, top user agents, top countries by request count. Highlight anomalies.✓ コピーしました
    → 異常の候補
  2. レート制限ルールを作成
    Create a WAF rate-limit rule: 60 req/min per IP on path /<hot path>, action: challenge. Log match count after 2 minutes.✓ コピーしました
    → ルール作成完了 + マッチのストリーミング
  3. 安全を確認後にロールバック
    Once origin health is green for 30 min, disable (not delete) the rule. Leave a description tagged 'incident-<id>' for audit.✓ コピーしました
    → ルール無効化完了、監査用エントリ保持

結果: 再有効化または改良が可能なルールで攻撃を緩和 — 恒久的なコンフィグドリフトなし。

注意点
  • 国単位の一括ブロックは正当なユーザーも遮断する — まずChallengeまたはJS-Challengeから開始し、Blockは使わない。観察してから絞り込む
組み合わせ: sentry

デプロイ後に特定URLのCloudflareキャッシュをパージ

👤 静的アセットの更新をリリースするフロントエンド開発者 ⏱ ~10 min beginner

使うタイミング: デプロイ後:CSS/JSのハッシュが変更され、ユーザーに即座に新バージョンを配信したい場合。

フロー
  1. パージ対象ファイルを一覧表示
    My build changed these URLs: [list]. Confirm each is cached at CF edge (HEAD + cf-cache-status).✓ コピーしました
    → 各URLの現在のキャッシュヒット/ミス状態
  2. URL指定でパージ
    Purge exactly those URLs on zone <zone>. Do NOT do purge-everything.✓ コピーしました
    → パージジョブ受理
  3. フレッシュフェッチを検証
    After 10 seconds, HEAD each URL again — cf-cache-status should be MISS or REVALIDATED.✓ コピーしました
    → 最新のキャッシュ状態

結果: ターゲットを絞ったキャッシュ破棄。ゾーン全体の誤パージ(リロード時にオリジンを圧迫する)を回避。

注意点
  • purge-everythingはオリジンにサンダリングハードを引き起こす — 代替パスをウォーム済みでない限りpurge_allを呼ばない。purge-by-urlでほぼ十分
組み合わせ: github

ローカルJSONファイルからWorkers KVにデータを投入

👤 WorkersベースのAPIをデプロイするエンジニア ⏱ ~15 min intermediate

使うタイミング: KVでコンフィグやフィーチャーフラグデータを管理しており、ローカルの信頼できるソースから同期したい場合。

前提条件
  • Workers KV Storage: Edit権限を持つトークン — 特定のnamespace idにスコープを限定する
フロー
  1. ローカルソースを読み込む
    Read /config/kv.json. Validate it as {key: value} object.✓ コピーしました
    → パース済みコンフィグ
  2. 現在のKVとの差分を取得
    List keys in namespace <id>. Compute adds / updates / deletes vs my local file.✓ コピーしました
    → 変更計画
  3. バルクライトで適用
    Use bulk write for the changes. Deletes only if I confirm — show which keys would be deleted first.✓ コピーしました
    → バルクライト完了、削除はレビュー済み

結果: KVネームスペースがソースファイルと十分にアトミックに同期されます。

注意点
  • KVの結果整合性により、リーダーは最大約60秒間古い値を参照する可能性がある — 強い整合性が必要な場合は、代わりにD1またはDurable Objectsを使用する
組み合わせ: filesystem

Cloudflare Analyticsからの週次トラフィック・脅威サマリー

👤 プロダクト / グロース + セキュリティ ⏱ ~20 min intermediate

使うタイミング: 金曜日のダイジェスト:トラフィックパターンはどうか、どんな脅威をブロックしたか。

フロー
  1. 合計値を取得
    For zone <zone> last 7 days: total requests, bandwidth, threats blocked, top 10 countries.✓ コピーしました
    → ヘッドラインの数値
  2. トップパスとリファラー
    Top 20 paths by requests; top 10 referrers. Highlight changes vs previous week.✓ コピーしました
    → 成長/減少テーブル
  3. ファイアウォールイベントのサマリー
    Top firewall rule triggers in the last 7 days. Any rules never triggered — candidates for cleanup.✓ コピーしました
    → ルールセットの健全性レポート

結果: トラフィック、脅威、ルールの健全性を含む1ページの週次レポート。

注意点
  • Freeプランのアナリティクスはサンプリングされている — 正確なデータが必要な場合は、Pro以上のプランでLogpush / GraphQL Analytics APIを使用する
組み合わせ: notion

組み合わせ

他のMCPと組み合わせて10倍の力を

cloudflare-api + github

mainへのマージ時に、デプロイされたアセットURLのキャッシュをパージ

PR #342 merged; its diff changed /static/app.a1b2.js. Purge that URL on zone <zone>, verify with HEAD.✓ コピーしました
cloudflare-api + sentry

Sentryのトラフィックスパイクとファイアウォールイベントデータを相関分析

Sentry shows 5xx spike at 14:02. Pull CF analytics for 14:00-14:05 for the same zone; correlate with firewall events.✓ コピーしました
cloudflare-api + filesystem

ローカルのゾーン設定ファイルをCloudflareに同期(GitOps-lite)

Read /dns/mydomain.yaml; reconcile against current zone state; apply safely with review.✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
list_zones アカウント内のゾーンを検出 free
list_dns_records zone_id, type?, name? DNS編集前に現在の状態を確認 free
create_dns_record / update_dns_record / delete_dns_record zone_id, record DNSの変更操作(Editトークンが必要) free
purge_cache zone_id, files?|tags?|hosts?|everything? デプロイ後のキャッシュ破棄 free
list_firewall_rules / create_firewall_rule zone_id, ... インシデント対応 / セキュリティ強化 free
analytics_dashboard zone_id, since, until トラフィックレポート free
kv_list / kv_get / kv_put / kv_bulk namespace_id, key/value Workers KV操作 metered beyond free tier
deploy_worker script name, script content, bindings? Workerをデプロイ free up to limits

コストと制限

運用コスト

APIクォータ
ユーザーあたり5分間に1200リクエスト(Cloudflareグローバルレート制限)
呼び出しあたりのトークン
DNS一覧表示:ページあたり200〜1000トークン。アナリティクス:最大3000。
金額
API無料。Workers有料プラン/KVの無料枠超過分は課金。プランはFree / Pro $20/月 / Business $200/月。
ヒント
トークンとページネーションを節約するため、クライアント側ではなくサーバー側でのフィルタリング(type、name)を優先する。

セキュリティ

権限、シークレット、影響範囲

最小スコープ: Zone:Zone:Read Zone:DNS:Read (add :Edit only for specific zones that need writes)
認証情報の保管: CLOUDFLARE_API_TOKENを環境変数に設定 — Global API Keyは絶対に使わない
データ送信先: すべてのAPI呼び出しはapi.cloudflare.comへ送信されます
絶対に付与しない: Global API Key (full account control) Account:Access:Edit without account-level review

トラブルシューティング

よくあるエラーと対処法

10000 Authentication error

トークンが無効、または必要な権限が不足しています。特定のゾーン+権限で再作成してください。

確認: curl -H 'Authorization: Bearer $CLOUDFLARE_API_TOKEN' https://api.cloudflare.com/client/v4/user/tokens/verify
81057 Record already exists

同じname+type+contentのレコードが既に存在します。新規作成ではなく、既存レコードをidで更新してください。

Purge-by-URLが成功を返すがキャッシュがまだヒットする

URLはクエリストリングの順序を含め完全一致が必要です。また、cf-cache-statusを確認してください — 'DYNAMIC'の場合、そもそもキャッシュされていません。

Rate limited (429)

CloudflareのグローバルAPIレート制限に達しました。バックオフ、バッチ処理、またはワークフローごとに異なるトークンでワークロードを分散してください。

代替案

Cloudflare API 他との比較

代替案代わりに使う場面トレードオフ
Cloudflare official MCP (other)Cloudflareのドキュメント/Workers可観測性に特化したMCPを使いたい場合API対応範囲が狭い
Route 53 MCPAWSを使用しておりRoute53のDNSが必要な場合エコシステムが異なる。CDN/WAFが組み込まれていない

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る