MCPでcloudflare経由のトラフィックを簡単に分析

弊社ではWAF(Web Application Firewall)としてcloudflareを利用しています。HTTPトラフィックやWAFのイベントの分析に、Cloudflareのダッシュボードをよく利用しています。非常に便利ではありますが、グラフではなく値が欲しい場合や、複雑な条件であったり複数サイトを一つのグラフにしたい場合などは、ダッシュボードではできません。
そのような時はGraphQLでデータが取得できますが、学習コストがネックになることも…。
そこでMCPを利用して、自然言語でリクエスト必要なデータが取得できれば、ということで、本記事では、HTTPリクエスト数の取得とグラフ化を例に、簡単にトラフィックの分析を行う方法をご紹介します。

はじめに

cloudflareは公式でMCPサーバを提供してくれています。今回はこちらを利用します。

MCPクライアントもcloudflare AI playgroundが提供されていますが、あくまでplaygroundであり、利用上限も厳しいので、今回はWindows版のClaude Desktopを利用します。

また、cloudflareのアカウントは既に持っていて、いくつかのサイトがproxiedされている状態であることを前提とします。

事前準備

nodejsのインストール

nodejs公式ダウンロードサイトからLTSか最新版のnodejsをダウンロード、インストールします。

特に変更することなく、Nextで進めていくだけで問題ありません。

Claude Desktopのインストール

Claudeのダウンロードサイトからインストーラーをダウンロード、インストールします。

こちらも特に変更はなく、指示に従うだけで問題ありません。

cloudflareのAPIトークン発行

cloudflare dashboardにログインし、今回はデスクトップ利用なので、ユーザAPIトークンを発行します。

AccountsレベルのAccount Settingsと、ZoneレベルのZonesの権限がないと、GraphQLのクエリで指定されるAccountID、ZoneIDを取得してくれません。

Claude Desktopの設定

Claude Desktopを起動して、[設定]-[開発者]を選択、[設定を編集]を選択し、\claude_desktop_config.json を選択して、下記の内容を記載します。

{
  "mcpServers": {
    "cloudflare-graphql": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://graphql.mcp.cloudflare.com/sse",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer xxxxxxxxxxxxxxx"
      }
    }
  }
}

envのAUTH_HEADERには、発行したAPIトークンを記載します。

MCPサーバは、GraphQL以外にもあります。他のMCPサーバを利用したい場合は、Cloudflare’s own MCP servers – Cloudflare Docscloudflare/mcp-server-cloudflare – GitHub をご確認下さい。その場合は、APIトークンで設定する権限も変わるので、ご注意下さい。

また、WindowsのClaude Desktopでは、npxを実行する際にargsにスペースが含まれると、引数をエスケープされないバグがあるようです(参考)。envとしてスペースが含まれる値の部分を渡すことで回避できます。逆にargsの–header引数の値として渡す Authorization:${AUTH_HEADER} にはスペースを含めてはいけません。

Claude Desktop起動

Claude Desktopを再起動して、[設定]-[開発者]を確認します。

runningになっていれば、MCPサーバへの接続は成功です。

failed になっていたり、MCPに関するエラーメッセージが出てきたら、ログファイルを確認してください。

ログファイルは、C:\Users\xxxx\AppData\Roaming\Claude\logs にある、mcp-servers-~.log ファイルです。(~の部分は設定ファイルに書いた、mcpServersのkeyになります。)

Claude Desktopでグラフを生成してみる

さあ、準備が整いました。では早速リクエストしてみます。

非常にシンプルなプロンプトですが、どうなるでしょうか。

Claudeが自分でどうやったら必要なデータが取れるのかを調査し、取得した情報を使って更にリクエストする、と言ったことが繰り返されます。

ちなみに、折り畳みの部分には、cloudflareのGraphQLに対する、リクエストとレスポンスが出力されています。結果だけではなく、データの取得方法についても出力してくれるので、他の処理に組み込むためのとっかかりにもなります。

では、続きを見ていきましょう。

とうとうHTTPのリクエスト数を出力してくれました!

特にリクエストはしていませんが、分析もしてくれています。

では、今度は別のサイトについてもHTTPリクエスト数を出してみましょう。

どのようなクエリを実行すれば良いかはわかっているので、今度はゾーンIDの取得からデータの取得まで、最短で処理されています。

1つ目のサイトと同じように概要を出力した上で、比較もしてくれています。

では、この2つのサイトのHTTPリクエスト数のグラフを作成してみましょう。

作成されたグラフがこちら。

cloudflareのダッシュボードでは、異なるゾーンにある特定のサイトについて、1つのグラフとして出力することができないので、これは便利です!

最後に

今回はすんなりいったパターンをご紹介させて頂きましたが、実は全く同じプロンプトでも、何度か失敗してようやく成功したパターンや、何度失敗しても上手くいかずに諦められてしまったパターンもありました。また、ClaudeのFreeプランで試していましたが、何度も試行錯誤されると、簡単に利用上限を突破する、と言ったこともありました。そのため、実際に業務等で継続して利用する場合は、プランの変更や利用モデルの変更、成功率を上げるためにプロンプトを改善する、といったことが必要であると思います。

とはいえ、継続的にデータを取得する際の最初のたたき台にしたり、普段と異なる形式・条件でデータを取得、分析したいと言った時には、非常に強力なツールとなるのではないでしょうか。

また、今回はcloudflareのGraphQLだけでしたが、例えば自社の他のツールにもMCPサーバを導入し、生成AIで連係させることで、必要とするデータ・資料をほぼ人手を介することなく、かつ少ない学習コストで出力させることが容易になる可能性があります。但し、そういった便利な使い方をするためには、自社のツール・システムについても、AIを導入しやすい形に変化させていくことが重要となってくるでしょう。

ブログの著者欄

木村 圭太

GMOインターネット株式会社

2014年入社。データセンタ管理・監視/運用業務を経て、サーバインフラ開発・運用、DBサーバインフラ・DBA等に従事。 現在は主にオンプレミスのサーバインフラ開発・運用とWAFの運用、また2023年よりアーキテクトとしても活動。

採用情報

関連記事

KEYWORD

TAG

もっとタグを見る

採用情報

SNS FOLLOW

GMOインターネットグループのSNSをフォローして最新情報をチェック