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サーバーの運用品質を継続的に向上させることができます。