mcp-legacy-lane
Инструментируйте старый путь, прежде чем удалять его
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 hitsDCR — это 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 выполненных операций.
Доказательства | Вердикт |
Нет операций |
|
Одна или более устаревших операций |
|
Ноль устаревших операций, выборка ниже порогов |
|
Ноль устаревших операций, оба порога пройдены |
|
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 — и получите ответ Кента.
Сигналы
Сигнал | Хранилище | Назначение |
| OTLP | Объём запросов, одна серия на |
| OTLP | Сопоставимые операции, одна серия на |
| OTLP | Попытки DCR и CIMD, одна серия на |
| OTLP | Дни тишины на старой полосе, |
| 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 ( | Modern ( | |
Имя метода | Тело JSON-RPC | Заголовок |
| только |
|
Современная обёртка повторяет clientInfo в params._meta в каждом запросе, поэтому любой экземпляр может его обслужить. Устаревшая полоса помещает имя в рукопожатие. У сервера без состояния нет места, чтобы сохранить его для последующего вызова инструмента. factory.ts читает оба. Отчёт может назвать legacy-dashboard@0.9.4, потому что это имя пришло на initialize, а не на вызове инструмента, который учитывается.
Вы можете маршрутизировать шлюз по MCP-Method, потому что запрос описывает сам себя. По той же причине вы атрибутируете трафик без сеанса.
activeDays группирует по дате UTC, поэтому клиент, чьи пользователи работают вечером в США, может попасть в две корзины. Маршруты аутентификации записывают попытки DCR и CIMD. Они не выпускают токены и не загружают документы CIMD.
Конфигурация
Переменная | Эффект |
| Расположение журнала |
| Окно отчёта |
| Хранение журнала |
| Порог размера выборки |
| Порог активных дней |
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 добавляет спаны и гистограммы длительности с обеих сторон. Вы отвечаете на вопрос об удалении, используя счётчики и журнал.
Карта кода
Файл | Ответственность |
| Двухэпохальные инструменты; читает эпоху, метод и клиента для каждого запроса |
| Разбирает тело один раз, передаёт его фабрике |
| Счётчики OTel и оконные снимки |
| Индексированный SQLite-журнал, плюс хранилище в памяти для тестов |
| Пороги и текст отчёта |
| Доказательства попыток DCR и CIMD |
| Читает серии полос обратно из OTLP |
| Два именованных клиента, по одному на полосу |
Проверка
pnpm typecheck
pnpm testТринадцать тестов покрывают смещение соотношения, фильтрацию окна, сохранение при перезапуске, результаты аутентификации, атрибуцию клиентов, счётчики устаревших методов и оба порога удаления.
This server cannot be installed
Maintenance
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
- AlicenseNot gradedqualityBmaintenanceProvides 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.1MIT
- AlicenseNot gradedqualityCmaintenanceA 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.4MIT
- AlicenseAqualityAmaintenanceTransparent MCP proxy with OpenTelemetry tracing. Wrap any MCP server, persist traces to SQLite · Postgres · MySQL. No code changes needed.23311Apache 2.0
- AlicenseNot gradedqualityCmaintenanceMCP-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.43MIT
Related MCP Connectors
Monitor MCP servers, API contracts and AI outputs for schema drift. Alerts on breaking changes.
MCP uptime, schema, auth, and SLA receipt monitoring.
Remote MCP for A2A failure replay MCP, structured receipts, audit logs, and reviewer-ready evidence.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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