Skip to main content
Glama

Инструментируйте старый путь, прежде чем удалять его

CI

MCP — это открытый протокол для вызова инструментов через JSON-RPC из LLM-приложений.

Домашнее задание Кента: у вас всё ещё подключён устаревший путь, и вы не подсчитали, пользуется ли им кто-то. Измерьте, прежде чем удалять.

Этот репозиторий запускает один двухэпохальный MCP-сервер и SQLite-журнал, который переживает перезапуск. Вы сохраняете запасной вариант, пока остаётся хоть одна устаревшая операция.

Страница versioning называет две полосы. Legacy — это 2025-11-25 и ранее: сеанс начинается с initialize. Modern — это 2026-07-28 и позже: каждый запрос несёт версию и идентичность в _meta.

Подсчёт выполненных работ

Переподключающийся клиент меняет количество запросов. Пять вызовов устаревших инструментов стоят пятнадцать запросов, если клиент каждый раз открывает новое соединение, и семь, если он держит одно соединение. Устаревшее рукопожатие тратит initialize и notifications/initialized один раз на соединение, поэтому переподключающийся клиент выглядит как интенсивный устаревший трафик. Каждая строка — это одни и те же пять вызовов инструментов на полосу:

Пять вызовов инструментов на полосу

Запросы Legacy

Запросы Modern

Доля Legacy

Клиент переподключается для каждого вызова

15

10

60.0%

Клиент держит одно соединение

7

6

53.8%

Выполненные операции

5

5

50.0%

Вы считаете 5 и 5 в строке операций. Строки запросов различаются на шесть пунктов, потому что клиент решил переподключиться. 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: клиент отправляет метаданные POST-запросом на /register при каждом подключении. Устарело в 2026-07-28. CIMD — это Client ID Metadata Documents: идентификатор клиента — это HTTPS-URL на статические метаданные, замена DCR.

Затем прочитайте оба хранилища:

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

Подождите шесть секунд после pnpm traffic перед pnpm proof, чтобы сбор данных завершился.

Первый запуск выводит это:

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 отправляет пять устаревших клиентов и три современных — смесь, которую Кент описывает через несколько недель после выпуска спецификации. Каждый клиент переподключается для своего одного вызова, поэтому строка запросов показывает 15 против 6. Отчёт называет legacy-dashboard@0.9.4, так что вы знаете, кому писать.

Политика

По умолчанию: окно в семь дней, семь активных дней трафика, 100 выполненных операций.

Доказательства

Вердикт

Нет операций

no_traffic

Одна или более устаревших операций

keep_both

Ноль устаревших операций, выборка ниже порогов

collect_more_data

Ноль устаревших операций, оба порога пройдены

safe_to_plan_removal

recommend() возвращает 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 читает постоянное окно.

Перечислите mcp.protocol.lane.operations в autotel и сравните серии lane=legacy и lane=modern. Вызовите migrationStatus на сервере миграции. Можем ли мы удалить запасной вариант 2025-11-25? Приведите количество операций, активные дни и пороги политики.

Запускайте этот промпт еженедельно по cron — и получите ответ Кента.

Сигналы

Сигнал

Хранилище

Назначение

mcp.protocol.lane.requests

OTLP

Объём запросов, одна серия на lane и mcp_method

mcp.protocol.lane.operations

OTLP

Сопоставимые операции, одна серия на lane

mcp.auth.registration.attempts

OTLP

Попытки DCR и CIMD, одна серия на mode и outcome

mcp.protocol.legacy.days_since_last_operation

OTLP

Дни тишины на старой полосе, -1, если она никогда не работала

.data/migration-evidence.db

SQLite

Окно отчёта, имена клиентов, переживает перезапуски

list_metrics возвращает одну серию на набор атрибутов, поэтому агент группирует по lane. Вам нужен autotel-mcp 0.5.1 или новее, чтобы эти атрибуты пережили приём данных.

Кент в среднем получает 125 регистраций DCR на пользователя, потому что каждое переподключение записывает ещё одну запись. Клиент CIMD не записывает ни одной. Считайте оба режима — и вы увидите, когда DCR затих.

Решения, которые стоит скопировать

Считайте объём, затем измеряйте тишину. Читайте счётчики, чтобы узнать, сколько устаревшего трафика пришло. Вам нужно последнее поступление, чтобы решить об удалении. mcp.protocol.legacy.days_since_last_operation читает журнал при сборе коллектора, поэтому вы не пересчитываете его на пути запроса. Срабатывайте предупреждение, когда датчик пересекает 30.

Помещайте имена методов в метрику. Помещайте имена клиентов в журнал. mcp_method — это метка, поэтому каждое новое значение создаёт новую серию, и неаутентифицированный вызывающий выбирает значение. STANDARD_METHODS в factory.ts — это список разрешённых: всё нераспознанное записывается как unknown. Имена клиентов не имеют границ, поэтому они идут в SQLite. Ещё одно имя стоит строки.

Держите оба порога. Минимальная выборка не даёт вам одобрить удаление в тихий день. Минимум активных дней не даёт одобрить его в один загруженный вторник, пропустивший еженедельное пакетное задание.

Обслуживайте обе эпохи без сеанса. createMcpHandler работает с legacy: 'stateless'. Одна фабрика обслуживает обе эпохи, а ctx.era называет полосу. Любой экземпляр может ответить на любой запрос, поэтому вы пишете счётчик. Вам не нужна таблица сеансов или липкая маршрутизация. Государственный запасной вариант заставил бы вас инструментировать сеансы. Тогда отчёт зависел бы от балансировщика нагрузки.

Имена клиентов по эпохам

Современный запрос называет своего вызывающего. Устаревший запрос называет вызывающего один раз, во время initialize.

Legacy (2025-11-25 и ранее)

Modern (2026-07-28)

Имя метода

Тело JSON-RPC

Заголовок MCP-Method

clientInfo

только initialize

_meta в каждом запросе

Современная обёртка повторяет clientInfo в params._meta в каждом запросе, поэтому любой экземпляр может его обслужить. Устаревшая полоса помещает имя в рукопожатие. У сервера без состояния нет места, чтобы сохранить его для последующего вызова инструмента. factory.ts читает оба. Отчёт может назвать legacy-dashboard@0.9.4, потому что это имя пришло на initialize, а не на вызове инструмента, который учитывается.

Вы можете маршрутизировать шлюз по MCP-Method, потому что запрос описывает сам себя. По той же причине вы атрибутируете трафик без сеанса.

activeDays группирует по дате UTC, поэтому клиент, чьи пользователи работают вечером в США, может попасть в две корзины. Маршруты аутентификации записывают попытки 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 дней.

Чтобы увидеть, что журнал переживает перезапуск: запустите трафик, остановите сервер, запустите его снова, выполните 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

Разбирает тело один раз, передаёт его фабрике

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

Два именованных клиента, по одному на полосу

Проверка

pnpm typecheck
pnpm test

Тринадцать тестов покрывают смещение соотношения, фильтрацию окна, сохранение при перезапуске, результаты аутентификации, атрибуцию клиентов, счётчики устаревших методов и оба порога удаления.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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
    A
    maintenance
    Transparent MCP proxy with OpenTelemetry tracing. Wrap any MCP server, persist traces to SQLite · Postgres · MySQL. No code changes needed.
    2
    33
    11
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP-native health monitoring that probes MCP servers using the list_tools protocol handshake, detects version drift, stores history in SQLite, and generates an HTML dashboard.
    43
    MIT

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jagreehal/mcp-legacy-lane'

If you have feedback or need assistance with the MCP directory API, please join our Discord server