{"slug": "mcp-drift-monitor-deteccion-continua-de-cambios-no-autorizados-en-servidores-mcp", "title": "mcp-drift-monitor: detección continua de cambios no autorizados en servidores MCP", "summary": "Pedro Sordo Martínez released mcp-drift-monitor, an open-source tool that detects unauthorized changes in Model Context Protocol (MCP) servers by implementing a periodic full-catalog sweep. The tool addresses a critical blind spot identified in arXiv:2608.00997, which measured 19,099 servers over 88.6 days and found that traditional change-detection methods miss significant events. The monitor's unique diff engine and calibration against the paper's real panel ensure accurate detection of additions, changes, and removals.", "body_md": "mcp-drift-monitordetecta cambios no autorizados en servidores MCP (Model Context Protocol). Implementa el control primario faltante descrito en[arXiv:2608.00997]: un barrido completo periódico del catálogo que re-descarga todos los servidores y recomputa hashes.\n\n[arXiv:2608.00997](https://arxiv.org/abs/2608.00997) (*MCP Registry Drift: A 88.6-Day Measurement of 19,099 Servers*) reporta un punto ciego crítico: los enfoques tradicionales de detección de cambios fallan en identificar dos modos de fallo:\n\nEl paper mide 15,845 eventos de cambio, 19,877 adiciones y 911 eliminaciones, pero los modelos que rankean por historial previo pierden una fracción significativa de estos eventos.\n\n**Este monitor cierra esa brecha** con el control primario que el paper propone pero no implementa: un *full-catalog sweep* periódico.\n\n`mcp-drift-monitor`\n\nimplementa un **motor de diferencias único** (`compute_events`\n\n) que sirve tanto para polling incremental como para barridos completos. No hay lógica duplicada.\n\nCada vez que un hash de descripción cambia, el motor revalida el contenido (`len(drifts) > 0`\n\nes el único disparador). Si el registro responde 429, aplica backoff con `Retry-After`\n\n. Si el payload está malformado, lanza `SchemaDriftError`\n\ny registra el payload ofensor a nivel ERROR.\n\n```\ncore/\n  diff.py      — CatalogEntry, DriftEvent, NewArrivalEvent, RemovalEvent, compute_events\n  hasher.py    — normalize_description (NFC), hash_description\n  state.py     — StateStore (sqlite), FetchStatus, removed flag, get_all_hashes\n  poller.py    — Poller.fetch_catalog, PollConfig, SchemaDriftError, backoff\n  sweep.py     — run_sweep (control primario), SweepReport\n  calibrate.py — replay (FR-6), ReplayReport, external validity vs panel\n```\n\nEl monitor se calibró y verificó contra el panel real del paper (19,099 servidores observados durante 88.6 días). Resultados:\n\n| Evento del panel | Recuento | compute_events (neto) |\n|---|---|---|\n`add` |\n19,877 | 16,367 + 3,510 seed = 19,877 |\n`chg` |\n15,845 | 2,514 drift netos (<= chg) |\n`del` |\n911 | 911 eliminaciones |\n\n`arrival_events == add_count`\n\ny `removal_events == del_count`\n\nse cumplen porque ningún servidor es eliminado y re-agregado dentro del mismo intervalo inter-snapshot (0 violaciones de precondición).\n\nMás detalles de la metodología de calibración en el README del [repositorio](https://github.com/amurlaniakea/mcp-drift-monitor).\n\n```\ndocker run -v mcp-data:/app/data --name drift-monitor-prod -d \\\n  amurlaniakea/mcp-drift-monitor:latest sweep\ngit clone https://github.com/amurlaniakea/mcp-drift-monitor.git\ncd mcp-drift-monitor\npython -m venv .venv && source .venv/bin/activate\npip install -e \".[test]\"\nruff check mcp_drift_monitor tests && pytest -v\n```\n\nSuit de tests:\n\n`tests/test_diff.py`\n\n— motor de diferencias (determinismo, orden, disjunción de eventos)`tests/test_hasher.py`\n\n— normalización NFC + casos límite de hashing`tests/test_poller.py`\n\n— backoff 429, agotamiento de reintentos, registro de desviaciones de esquema`tests/test_state.py`\n\n— persistencia de StateStore, flag eliminado, dataclass fuente única`tests/test_sweep.py`\n\n— control primario de barrido completo (nueva adición, cambio silencioso)`tests/test_replay_panel.py`\n\n— [EXTERNAL-VALIDITY] AC-1/2/3 contra el panel real del paperEl repositorio incluye GitHub Actions que ejecutan ruff + pytest en cada PR, y construyen imágenes multi-platforma (amd64/arm64) a GHCR y DockerHub en cada release.\n\nAGPL-3.0-or-later. SPDX-FileCopyrightText: 2026 Pedro Sordo Martínez.\n\n`amurlaniakea/mcp-drift-monitor`\n\n*Licencia: AGPL-3.0-or-later*", "url": "https://wpnews.pro/news/mcp-drift-monitor-deteccion-continua-de-cambios-no-autorizados-en-servidores-mcp", "canonical_source": "https://dev.to/magopredator/mcp-drift-monitor-deteccion-continua-de-cambios-no-autorizados-en-servidores-mcp-f8", "published_at": "2026-08-23 00:35:55+00:00", "updated_at": "2026-08-23 00:43:16.048209+00:00", "lang": "en", "topics": ["developer-tools", "ai-infrastructure", "ai-safety"], "entities": ["Pedro Sordo Martínez", "mcp-drift-monitor", "arXiv:2608.00997", "MCP", "GitHub", "DockerHub", "GHCR"], "alternates": {"html": "https://wpnews.pro/news/mcp-drift-monitor-deteccion-continua-de-cambios-no-autorizados-en-servidores-mcp", "markdown": "https://wpnews.pro/news/mcp-drift-monitor-deteccion-continua-de-cambios-no-autorizados-en-servidores-mcp.md", "text": "https://wpnews.pro/news/mcp-drift-monitor-deteccion-continua-de-cambios-no-autorizados-en-servidores-mcp.txt", "jsonld": "https://wpnews.pro/news/mcp-drift-monitor-deteccion-continua-de-cambios-no-autorizados-en-servidores-mcp.jsonld"}}