Skip to main content
Glama

削除する前に旧パスを計測する

CI

MCP は、LLMアプリがJSON-RPC経由でツールを呼び出すためのオープンプロトコルです。

Kentの宿題: 旧パスがまだ配線されたままで、誰がまだ使っているかを数えていない。削除する前に計測せよ。

このリポジトリは、1つのデュアルエラMCPサーバーと、再起動後も残るSQLite台帳を実行します。レガシー操作が残っている限り、フォールバックを維持します。

バージョニングページは2つのレーンを定義しています。レガシーは2025-11-25以前: セッションはinitializeで始まります。モダンは2026-07-28以降: 各リクエストは_metaにバージョンとIDを保持します。

完了した作業を数える

再接続するクライアントはリクエスト数を変えます。レガシーツール呼び出し5回は、クライアントが毎回新しい接続を開く場合は15リクエスト、1つの接続を保持する場合は7リクエストになります。レガシーハンドシェイクは接続ごとにinitializeとnotifications/initializedを1回消費するため、再接続するクライアントは大量のレガシートラフィックのように見えます。各行はレーンごとに同じ5回のツール呼び出しです:

レーンごとのツール呼び出し5回

レガシーリクエスト

モダンリクエスト

レガシー割合

クライアントが呼び出しごとに再接続

15

10

60.0%

クライアントが1つの接続を保持

7

6

53.8%

完了した操作

5

5

50.0%

操作行では5と5を数えます。リクエスト行は、クライアントが再接続を選択したため6ポイント異なります。recommend()は操作行を読み取ります。トランスポートの書き換えや接続方法を変えるクライアントの後でも一致する単位を数えてください。

Related MCP server: mcpstat

実行方法

Node 24以降。台帳はnode:sqliteで保存します。

まずコレクターを起動し、次にサーバーを起動し、その後トラフィックを生成します:

pnpm install

pnpm collector   # http://127.0.0.1:3000, OTLP (the metric export format) and agent tools
pnpm server      # http://127.0.0.1:8787, dual-era MCP server
pnpm traffic     # legacy and modern tool calls, plus DCR and CIMD hits

DCRはDynamic Client Registrationです: クライアントは接続のたびに/registerへメタデータをPOSTします。2026-07-28で非推奨。CIMDはClient ID Metadata Documentsです: クライアントIDは静的メタデータへのHTTPS URLで、DCRの置き換えです。

次に2つのストアを読み取ります:

pnpm report      # verdict from .data/migration-evidence.db
pnpm proof       # lane series from the collector

pnpm trafficの後、pnpm proofの前に6秒待って、スクレイプが着地するようにします。

最初の実行では次のように出力されます:

Migration readiness: MCP protocol lanes
=======================================
window            : 7 days
active days       : 1/7 required
legacy operations : 5
modern operations : 3
total operations  : 8/100 required
legacy %          : 62.50%
raw requests      : 15 legacy / 6 modern
legacy methods    : initialize x5, notifications/initialized x5, tools/call x5
legacy clients    : legacy-dashboard@0.9.4
modern clients    : modern-agent@2.1.0
auth DCR          : 2 attempts (1 success, 1 failure)
auth CIMD         : 3 attempts (2 success, 1 failure)

recommendation    : keep_both

A legacy client completed an operation. Keep the fallback and check next week.
Ask these clients to upgrade: legacy-dashboard@0.9.4.

pnpm trafficはレガシークライアント5つとモダンクライアント3つを送信します。これはスペックリリースの数週間後にKentが説明する構成です。各クライアントは1回の呼び出しのために再接続するため、リクエスト行は15対6になります。レポートはlegacy-dashboard@0.9.4を指名するので、誰にメールすればよいかわかります。

ポリシー

デフォルト: 7日間のウィンドウ、7日のアクティブトラフィック日数、100件の完了操作。

証拠

判定

操作なし

no_traffic

レガシー操作が1件以上

keep_both

レガシー操作ゼロ、サンプルがガード未満

collect_more_data

レガシー操作ゼロ、両ガードを通過

safe_to_plan_removal

recommend()は、レガシー操作が1件あれば、モダン操作が200件あってもkeep_bothを返します。その呼び出しは依然としてクライアントに属しています。モダンのボリュームは、誰かがまだ旧パスを必要としているかどうかを教えてくれません。

非推奨ウィンドウ

非推奨機能レジストリは、DCR、roots、sampling、loggingを2026-07-28で非推奨としてリストしています。最も早い削除は2027-07-28以降の最初のリビジョンです。ローカルのクリーンなレポートはその日付を動かしません。スペックに従うクライアントは約束されたウィンドウを依然として持っています。

エージェントに問い合わせる

コレクターとサーバーを起動したままにします。.mcp.jsonはautotelをhttp://127.0.0.1:3000/mcpに、migrationをhttp://127.0.0.1:8787/mcpに向けます。migrationStatusは永続的なウィンドウを読み取ります。

autotelでmcp.protocol.lane.operationsをリストし、lane=legacyとlane=modernの系列を比較してください。migrationサーバーでmigrationStatusを呼び出してください。2025-11-25のフォールバックを削除できますか? 操作数、アクティブ日数、ポリシーガードレールを引用してください。

そのプロンプトを毎週のcronで実行すると、Kentの答えが得られます。

シグナル

シグナル

ストレージ

目的

mcp.protocol.lane.requests

OTLP

リクエスト量、laneとmcp_methodごとに1系列

mcp.protocol.lane.operations

OTLP

比較可能な操作、laneごとに1系列

mcp.auth.registration.attempts

OTLP

DCRとCIMDの試行、modeとoutcomeごとに1系列

mcp.protocol.legacy.days_since_last_operation

OTLP

旧レーンの沈黙日数、未実行時は-1

.data/migration-evidence.db

SQLite

レポートウィンドウ、クライアント名、再起動をまたぐ

list_metricsは属性セットごとに1系列を返すため、エージェントはlaneでグループ化します。これらの属性がインジェスト後も残るには、autotel-mcp 0.5.1以降が必要です。

Kentはユーザーあたり平均125件のDCR登録を記録します。これは再接続のたびに別のレコードが書き込まれるためです。CIMDクライアントは何も書き込みません。両方のモードを数えると、DCRが静かになったときがわかります。

コピーすべき判断

ボリュームを数え、その後沈黙を測定する。 到着したレガシートラフィックの量はカウンターを読み取ります。削除を判断するには最後の到着が必要です。mcp.protocol.legacy.days_since_last_operationは、コレクターがスクレイプするときに台帳を読み取るため、リクエストパスで再計算する必要はありません。ゲージが30を超えたらアラートを出します。

メトリクスにはメソッド名を。台帳にはクライアント名を。 mcp_methodはラベルであるため、新しい値ごとに別の系列が作成され、認証されていない呼び出し元が値を選択できます。factory.tsのSTANDARD_METHODSは許可リストです: 認識されないものはunknownとして記録されます。クライアント名には境界がないため、SQLiteに入ります。名前が1つ増えると行が1つ増えます。

両方のガードを維持する。 最小サンプルは、静かな午後に削除を承認するのを防ぎます。最小アクティブ日数は、毎週のバッチジョブを逃した忙しい火曜日に承認するのを防ぎます。

セッションなしで両エラを提供する。 createMcpHandlerはlegacy: 'stateless'で実行されます。1つのファクトリーが両エラを提供し、ctx.eraがレーンを指名します。どのインスタンスも任意のリクエストに応答できるため、カウンターを書くことができます。セッションテーブルやスティッキールーティングは不要です。ステートフルなフォールバックではセッションを計測する必要があり、レポートはロードバランサーに依存することになります。

エラごとのクライアント名

モダンリクエストは呼び出し元を指名します。レガシーリクエストはinitialize中に1回だけ呼び出し元を指名します。

レガシー (2025-11-25以前)

モダン (2026-07-28)

メソッド名

JSON-RPCボディ

MCP-Methodヘッダー

clientInfo

initializeのみ

すべてのリクエストの_meta

モダンエンベロープはparams._metaのclientInfoをすべてのリクエストで繰り返すため、どのインスタンスでも提供できます。レガシーレーンは名前をハンドシェイクに置きます。ステートレスサーバーには、後続のツール呼び出しのために名前を保持する場所がありません。factory.tsは両方を読み取ります。レポートがlegacy-dashboard@0.9.4を指名できるのは、その名前がカウントされるツール呼び出しではなくinitializeで到着したためです。

MCP-Methodでゲートウェイをルーティングできます。リクエストが自分自身を記述するためです。トラフィックをセッションなしで属性付けできるのも同じ理由です。

activeDaysはUTC日付でバケット化するため、ユーザーが米国の夜間に働くクライアントは2つのバケットに入ることがあります。認証ルートはDCRとCIMDの試行を書き込みます。トークンは発行せず、CIMDドキュメントも取得しません。

設定

変数

効果

MIGRATION_EVIDENCE_PATH

台帳の場所

MIGRATION_WINDOW_DAYS

レポートウィンドウ

MIGRATION_RETENTION_DAYS

台帳の保持期間

MIGRATION_MIN_OPERATIONS

サンプルサイズガード

MIGRATION_MIN_ACTIVE_DAYS

アクティブ日数ガード

GET /metrics/lanes?windowDays=30は同じウィンドウを最大90日まで受け付けます。

台帳が再起動後も残ることを確認するには: trafficを実行し、サーバーを停止し、再度起動し、pnpm reportを実行します。カウントは残ります。

pnpm collectorはテレメトリをautotel.dbに30日間保持します。サーバーは証拠を.data/migration-evidence.dbに90日間保持します。Gitは両方を無視します。

デュアルエラサーバー

サーバーがデュアルエラなのは、createMcpHandlerがlegacy: 'stateless'で実行され、ctx.eraがカウントするレーンを指名するためです。2026-07-28の変更セットの残りについてはチェンジログを参照してください。

autotel-mcp-instrumentationは両側にスパンと所要時間ヒストグラムを追加します。削除の質問にはカウンターと台帳から答えます。

コードマップ

ファイル

責任

src/server/factory.ts

デュアルエラツール; リクエストごとにエラ、メソッド、クライアントを読み取る

src/server/serve.ts

ボディを1回パースし、ファクトリーと共有する

src/telemetry/legacy-metrics.ts

OTelカウンターとウィンドウ化スナップショット

src/telemetry/evidence-store.ts

インデックス付きSQLite台帳、テスト用のメモリストアも含む

src/report/recommend.ts

ガードとレポート文面

src/server/oauth-routes.ts

DCRとCIMDの試行証拠

src/proof/autotel-proof.ts

レーン系列をOTLPから読み戻す

src/client/generate-traffic.ts

レーンごとに1つの名前付きクライアント、計2つ

検証

pnpm typecheck
pnpm test

13のテストが、比率バイアス、ウィンドウフィルタリング、再起動永続性、認証結果、クライアント属性付け、レガシーメソッド数、両方の削除ガードをカバーしています。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides comprehensive monitoring and observability for MCP server ecosystems with real-time health checks, performance metrics, distributed tracing, anomaly detection, and automated performance reports using OpenTelemetry and Prometheus.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A Python utility for adding usage tracking, analytics, and audit trails to MCP servers using SQLite-backed persistence. It enables developers to monitor tool, prompt, and resource activity and expose these statistics directly to LLM clients.
    4
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Transparent MCP proxy with OpenTelemetry tracing. Wrap any MCP server, persist traces to SQLite · Postgres · MySQL. No code changes needed.
    2
    7 npm
    11
    Apache 2.0