MCPサーバーの利用状況監視にWorkers Analytics Engineを活用する

CloudflareのWorkers Analytics Engineを活用して、MCPサーバーの利用状況やエラーを効率的に監視する方法を解説。簡単な設定とSQLクエリで、ツールの使用頻度分析やサーバー最適化に役立てる実践的アプローチ。

広告ここから
広告ここまで

目次

    Model Context Protocol(MCP)サーバーを自作してCloudflareにデプロイする際、本番運用では利用状況やエラーの発生を適切にモニタリングする必要があります。どのツールが頻繁に使用されているか、どこでエラーが発生しているかを把握することで、サーバーの改善や最適化に役立てることができます。

    本記事では、CloudflareのWorkers Analytics Engineを使用してMCPサーバーの利用状況を効率的に監視する方法を紹介します。

    Workers Analytics Engineとは

    Workers Analytics Engineは、Cloudflareが提供する無制限カーディナリティの時系列分析プラットフォームです。Workersから直接データポイントを書き込み、SQLクエリでデータを分析できます。

    Workers で Workers Analytics engineを実装する

    Analytics EngineをWorkersから利用するには、Bindingsの登録が必要です。wrangler.jsoncを更新し、analytics_engine_datasetsへ登録しましょう。

    {
      "name": "my-mcp-server",
      "main": "src/index.ts",
      "compatibility_date": "2025-01-10",
      "analytics_engine_datasets": [
        {
          "binding": "ANALYTICS_ENGINE_DATASET",
          "dataset": "my-mcp-server-analytics"
        }
      ],
      "durable_objects": {
        "bindings": [
          {
            "name": "MyMCPAgent",
            "class_name": "MyMCPAgent"
          }
        ]
      }
    }

    npm run cf-typegenを実行すると、型定義が生成されます。

    interface Env {
      ANALYTICS_ENGINE_DATASET: AnalyticsEngineDataset;
      // その他のbinding...
    }

    生成された型情報を使って、MCP サーバーへの組み込みを行いましょう。Cloudflareの提供する Agents SDKを利用している場合、次のようなトラッキング用メソッドを作っておくと便利です。

    import { McpAgent } from "agents/mcp";
    import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
    import { z } from "zod";
    
    export class MyMCP extends McpAgent<Env> {
      server = new McpServer({
        name: "My MCP Server",
        version: "1.0.0",
      });
    
      // ツール利用状況をトラッキング
      private async trackToolCall(
        toolName: string, 
        status: "invoke" | "success" | "error" = "invoke", 
        userId: string = "anonymous"
      ) {
        await this.env.ANALYTICS_ENGINE_DATASET.writeDataPoint({
          blobs: [toolName, status, userId],
          doubles: [Date.now(), 1],
          indexes: [toolName]
        });
      }
    
      async init() {
        // ツール...
      }
    }

    あとは各種ツールで「呼び出し・成功・エラー」などをトラッキングしてやりましょう。トラッキングの処理結果を待つ必要はないため、waitUntilも併用することをおすすめします。

    
      async init() {
        // 検索ツール
        this.server.tool(
          "search_algolia",
          "Algoliaで検索します",
          {
            query: z.string().describe("検索キーワード"),
          },
          async (params) => {
            try {
              await this.ctx.waitUntil(
                this.trackToolCall("search_algolia", "invoke")
              );
    
              const result = await searchAlgolia(params.query);
    
              await this.ctx.waitUntil(
                this.trackToolCall("search_algolia", "success")
              );
    
              return {
                content: [{ type: "text", text: JSON.stringify(result) }],
              };
            } catch (error) {
              await this.ctx.waitUntil(
                this.trackToolCall("search_algolia", "error")
              );
              throw error;
            }
          }
        );
    
        // その他のツール...
      }
    }

    トラッキングしたデータを分析する

    Workers Analytics Engineでトラッキングしたデータは、SQLにて取得できます。例えばツールのトラッキングでは、次のようなSQLを実行してみましょう。

    -- 最も使用されているツールのランキング
    SELECT 
      blob1 AS tool_name,
      sum(double2) AS total_calls
    FROM "my-mcp-server-analytics"
    GROUP BY tool_name
    ORDER BY total_calls DESC;

    ある程度MCPサーバーのツールを実行した後であれば、このような形で利用状況がチェックできます。

    tool_name total_calls
    search_algolia 4
    add 1

    まとめ

    Workers Analytics Engineを使用することで、MCPサーバーの利用状況を効率的に監視できます。設定は簡単で、データセットの事前作成も不要です。SQLクエリによる柔軟な分析が可能で、本番運用での品質改善に大きく貢献します。

    シンプルなトラッキング機能から始めて、必要に応じて詳細な監視機能を追加していくことで、MCPサーバーの運用品質を継続的に向上させることができます。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark