rxjs-spy-mcp
rxjs-spy-mcp
Prototipo experimental de depuración de RxJS en tiempo de ejecución para Chrome DevTools MCP.
Este repositorio moderniza la idea detrás de rxjs-spy de Nicholas Jamieson para un flujo de trabajo de depuración asistido por IA: los eventos de RxJS en tiempo de ejecución se capturan en un registro estructurado en el heap, se exponen a través de una pequeña API de depuración y se hacen legibles para los agentes de Chrome DevTools MCP.
Nota sobre el colaborador principal
ChatGPT es el principal colaborador de este proyecto.
La arquitectura, la implementación inicial en TypeScript, los operadores de depuración personalizados de RxJS, la demo de MVU, el registro de heap con viaje en el tiempo y el puente de Chrome DevTools MCP se generaron y refinaron con ChatGPT a partir de los requisitos de depuración de RxJS del usuario.
Related MCP server: Kaboom Browser AI Devtools MCP
Objetivo del proyecto
El objetivo no es reemplazar rxjs-spy por completo todavía. Esta es una primera implementación experimental de un modelo de depuración de RxJS compatible con MCP.
El prototipo actual se centra en:
operadores de depuración de RxJS tipados
una demo de MVU tipo Elm
historial de estado con viaje en el tiempo
inspección pasiva basada en el heap
instantáneas seguras y redacción
descubrimiento de herramientas de terceros de Chrome DevTools
marcos de depuración legibles por IA
La dirección a largo plazo es un runtime moderno de rxjs-spy-mcp que pueda inspeccionar:
flujos etiquetados
notificaciones:
next,error,completesuscripciones y desuscripciones
transiciones de MVU:
Msg -> Modelcomportamiento interno de las suscripciones de
switchMap,mergeMap,concatMap,exhaustMaptrazas de temporización sensibles al scheduler
Modelo mental
Observable = static dataflow description
Subscription = runtime execution
Notification = runtime event: next | error | complete
Scheduler = runtime time policy
Heap registry = durable debug memory
Chrome MCP = AI-readable inspection bridgeEl depurador convierte los eventos asíncronos rápidos de RxJS en marcos de depuración persistentes:
Msg / next / error / complete / unsubscribe
↓
spyOnHeap / spyOnMvuLoop
↓
window.__RXJS_SPY_MCP__
↓
Chrome DevTools MCP / console / debug panelInstalación
npm installEjecutar la demo
npm run devAbre la URL local de Vite que se imprime en el terminal, normalmente:
http://127.0.0.1:5173Ejemplo: uso manual de la función de depuración
Inicia la aplicación con
npm run dev.Abre la consola de DevTools del navegador.
La aplicación ya debería haber registrado una transición inicial
INIT.Inspecciona los flujos rastreados:
window.__RXJS_SPY_MCP__.listStreams()Inspecciona el flujo de estado principal del MVU:
window.__RXJS_SPY_MCP__.inspectStream('main-app-state')Lee solo los marcos de la línea de tiempo:
window.__RXJS_SPY_MCP__.getTimeline('main-app-state', 10)Lee la historia de ejecución compacta:
window.__RXJS_SPY_MCP__.story('main-app-state', 20)Como tabla:
console.table(window.__RXJS_SPY_MCP__.story('main-app-state', 20))La salida de la historia convierte los marcos de depuración sin procesar en filas como:
INIT -> query="", active="", loading=false, results=0
SET_QUERY -> query="rxjs", active="", loading=false, results=0
START_SEARCH -> query="rxjs", active="rxjs", loading=true, results=0
SEARCH_SUCCESS -> query="rxjs", active="rxjs", loading=false, results=3Escribe una consulta de búsqueda, por ejemplo
rxjs, y pulsa Buscar.Simula un efecto asíncrono fallido escribiendo:
errorDespués pulsa Buscar.
Inspecciona de nuevo la historia:
console.table(window.__RXJS_SPY_MCP__.story('main-app-state', 20))Deberías ver una secuencia similar a:
INIT
SET_QUERY
START_SEARCH
SEARCH_FAILURECada marco mvu-transition almacena:
{
action: Msg,
resultingState: Model
}Esto proporciona una historia de ejecución legible:
The user changed the query.
A search request started.
The async effect failed.
The model moved into an error state.
The view rendered the error.Si getTimeline('main-app-state', 20) devuelve []
Ejecuta primero esto:
window.__RXJS_SPY_MCP__.diagnose()Después ejecuta:
window.__RXJS_SPY_MCP__.listStreams()Lo esperado después de una carga de página nueva:
streamCount >= 1
streamTags includes "main-app-state"
mainStateHistorySize >= 1Comprueba también que usas el nombre global exacto con dos guiones bajos antes y después de RXJS_SPY_MCP:
window.__RXJS_SPY_MCP__no:
window._RXJS_SPY_MCP_Si la línea de tiempo sigue vacía:
git pull
npm install
npm run devEntonces fuerza la recarga de la pestaña del navegador y ejecuta:
window.__RXJS_SPY_MCP__.diagnose()
window.__RXJS_SPY_MCP__.getTimeline('main-app-state', 20)La implementación actual usa un BehaviorSubject<Msg> con semilla para la fuente de mensajes del MVU, por lo que una transición INIT debería registrarse inmediatamente cuando runtime.appState$ recibe una suscripción en main.ts.
Ejemplo: viaje en el tiempo visual
El panel de depuración de la derecha muestra la línea de tiempo del heap.
Haz clic en cualquier marco para rebobinar visualmente la interfaz hasta el resultingState almacenado en ese marco.
También puedes saltar desde la consola de DevTools:
window.jumpToStep(2)Importante: actualmente esto es un rebobinado visual, no una restauración completa del estado basada en reproducción. El acumulador scan interno no se rebobina. Una versión futura puede añadir una verdadera reproducción de eventos.
Ejemplo: uso de los operadores personalizados
Inspección genérica de flujos
import { interval, map, take } from 'rxjs';
import { spyOnHeap } from './debug/operators';
const counter$ = interval(1000).pipe(
take(5),
map(n => ({ count: n })),
spyOnHeap('counter-stream', { maxFrames: 10 })
);
counter$.subscribe();Después inspecciónalo en la consola:
window.__RXJS_SPY_MCP__.inspectStream('counter-stream')Inspección de transiciones de MVU
const msg$ = new BehaviorSubject<Msg>({ type: 'INIT' });
const transition$ = msg$.pipe(
scan(
(acc, msg) => ({ msg, model: update(acc.model, msg) }),
{ msg: { type: 'INIT' }, model: initialModel }
),
spyOnMvuLoop('main-app-state', { maxFrames: 80 })
);Este es el caso de uso clave para la enseñanza/depuración:
Msg flows in over time.
update calculates the next Model.
spyOnMvuLoop stores Msg + Model as a debug frame.Ejemplo: flujo de trabajo con Chrome DevTools MCP
Este proyecto registra un puente de herramientas de desarrollador de terceros de Chrome DevTools a través del evento devtoolstooldiscovery a nivel de página.
Cuando Chrome DevTools MCP está conectado con la categoría experimental de herramientas de terceros habilitada, un agente de IA puede descubrir herramientas como:
rxjs_list_streams
rxjs_inspect_stream
rxjs_get_timeline
rxjs_storyUn prompt típico para el agente de IA:
Inspect the active browser tab with Chrome DevTools MCP. Use the rxjs-spy-mcp tools to list RxJS streams, read the main-app-state story, and explain why the latest search failed.Comportamiento esperado del agente:
1. list_3p_developer_tools
2. execute_3p_developer_tool: rxjs_list_streams
3. execute_3p_developer_tool: rxjs_story { tag: 'main-app-state', limit: 20 }
4. Explain the Msg -> Model transition that caused the bad state.Un enfoque MCP alternativo es la evaluación de scripts:
() => globalThis.__RXJS_SPY_MCP__.story('main-app-state', 20)Correcciones aplicadas al prototipo original
Dimensión | Corrección aplicada |
Concepto | Replanteó MCP como un puente de inspección, no como un reemplazo de la instrumentación de RxJS en tiempo de ejecución. |
Valor didáctico del viaje en el tiempo de MVU | Añadió seguimiento explícito de transiciones |
Corrección de TypeScript | Separó los tipos de la aplicación y los de depuración, corrigió imports no válidos, eliminó |
Corrección de la API de Chrome MCP | Reemplazó la idea inventada de |
Completitud del reemplazo de rxjs-spy | Añadió una base para flujos etiquetados, marcos de notificación, IDs de suscripción, seguimiento de teardown y resúmenes de flujos. Sigue sin ser un reemplazo completo de rxjs-spy. |
Usabilidad para agentes de IA | Añadió métodos |
Seguridad en producción | Instalación solo en desarrollo, redacción de claves tipo secreto, serialización segura de instantáneas, tolerancia a valores circulares e instantáneas con límite de tamaño. |
Limitaciones actuales
Este es un prototipo experimental. Todavía no implementa el comportamiento completo de rxjs-spy.
Trabajo pendiente o futuro:
API de etiquetado sin monkey-patch comparable a las etiquetas de
rxjs-spygrafo global de suscripciones de Observables
grafo de suscripciones padre/hijo
visualización de operadores de orden superior
operadores de depuración dedicados para
switchMap,mergeMap,concatMap,exhaustMaptrazas sensibles al scheduler para
asyncScheduler,animationFrameScheduler, tiempo virtual y derivaverdadero viaje en el tiempo basado en reproducción
pruebas
publicación de paquetes
Notas de seguridad
El registro de depuración expone el estado del runtime en window.__RXJS_SPY_MCP__ en modo desarrollo. No expongas datos sensibles de producción a través de los flujos de depuración.
La capa de instantáneas redacta claves comunes tipo secreto y limita el tamaño de la carga útil serializada, pero esto no es una barrera de seguridad completa.
Licencia
MIT
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
- AlicenseAqualityBmaintenanceExecute, debug, and visualize RxJS streams directly from AI assistants like Claude.6234MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for browser debugging, inspection, and verification that streams console logs, network errors, and user actions into AI coding assistants.65AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceLets AI coding agents control and inspect a live Chrome browser via MCP, providing Chrome DevTools capabilities for automation, debugging, and performance analysis.11Apache 2.0
- AlicenseAqualityAmaintenanceEnables AI agents to monitor and debug browser runtime errors, console logs, and page diagnostics in real time via a Chrome extension and local MCP server.4MIT
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
A paid remote MCP for AI agent browser DevTools MCP, built to return verdicts, receipts, usage logs,
Agent Replay Debugger MCP — record every agent step + deterministic replay. Step-debugger for
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/hansschenker/rxjs-spy-mcp-old'
If you have feedback or need assistance with the MCP directory API, please join our Discord server