Skip to main content
Glama
hadiproz

jupyter-vscode-mcp

by hadiproz

Jupyter VS Code MCP

License: MIT MCP

Extensión de VS Code que expone operaciones de Jupyter Notebook como herramientas MCP sobre HTTP puro — una URL portátil para cada agente de codificación de IA. Sin rutas absolutas, sin comando node, sin cableado de stdio.

Apunta cualquier cliente MCP a la URL, y el agente podrá explorar, editar, ejecutar y depurar notebooks en tu sesión activa del editor: ve las mismas celdas que ves, se comunica con el mismo kernel que usa tu notebook (local o remoto — Colab incluido), y cada acción se refleja en la interfaz real de VS Code.

Características

Edición de notebooks con identificadores de celda estables

  • Cada celda se identifica mediante un único esquema uniforme: #NB-xxxxxxxx, persistido en el campo estándar cell id de nbformat 4.5. Sobrevive a ediciones, inserción/eliminación de otras celdas, cambios de índice, guardado/reapertura, recargas de la extensión — incluso al copiar el archivo a otra máquina.

  • Los IDs nunca se reutilizan después de un borrado: las celdas nuevas siempre reciben IDs aleatorios nuevos. jupyter_get_summary asigna IDs a cualquier celda que carezca de uno (p. ej., creada a mano en la interfaz), de modo que cada identificador notificado se puede reutilizar de inmediato.

  • Los índices son siempre de base 0 (resumen, fuentes, rangos de ejecución, salidas) — sin convenciones mixtas.

Control de ejecución no bloqueante

  • jupyter_run_cells inicia la ejecución y regresa de inmediato; sondea con jupyter_wait_until_idle o toma una instantánea con jupyter_get_status. Sin esperas ciegas, sin timeouts de MCP en celdas largas.

  • Protección de disponibilidad del kernel: ejecutar contra un kernel muerto o ausente devuelve pistas accionables en lugar de bloquearse.

  • jupyter_interrupt_kernel aborta la ejecución actual conservando todas las variables.

Inteligencia de kernel (nivel Copilot)

  • jupyter_get_variables — informes de variables con información de tipos: DataFrame/Series como {shape, columns[:8], head(2)}, ndarray como {shape, dtype}, contenedores con length, escalares como reprs cortos. Usa la API oficial de vista de variables de Jupyter cuando está disponible; de lo contrario, una sonda silenciosa del kernel que nunca toca el contador de ejecución. El filtrado opcional por símbolos de documento oculta el ruido interno solo cuando los símbolos están realmente disponibles.

  • jupyter_get_pip_packages — inventario del entorno (nombre + versión) desde el entorno activo del kernel.

  • jupyter_install_packages — pip se ejecuta dentro del intérprete del propio kernel, por lo que los paquetes se instalan en el runtime que el notebook usa realmente — incluidas máquinas virtuales remotas como Colab, nunca en el host local. Soporta especificaciones de versión y --upgrade, verifica que cada especificación se resuelva después e informa de fallos reales (con la cola real de la salida de pip) en lugar de fingir éxito.

  • jupyter_get_status sondea el kernel en vivo para obtener la versión/plataforma real de Python en lugar de confiar en metadatos obsoletos.

  • jupyter_select_kernel abre el selector de kernel nativo de VS Code cuando no hay ningún kernel activo.

Transporte MCP solo por red

  • Streamable HTTP (especificación MCP 2025-11-25) con respuestas en JSON puro — un cliente mínimo funciona solo con curl.

  • Endpoints: /mcp (además del heredado /sse), GET /health para comprobar disponibilidad y sondear la versión.

  • Se admiten múltiples sesiones de agente concurrentes; las sesiones sobreviven a cambios en caliente del puerto.

Informes honestos

Los errores incluyen contexto y pistas para el siguiente paso: kernel ausente → guía de arranque, ID obsoleto → actualizar mediante el resumen, fallo en pip install → cola real del error de pip, kernel ocupado → nota explícita de aplazamiento en lugar de resultados vacíos en silencio.

Related MCP server: Jupyter MCP Server

Herramientas

Herramienta

Descripción

jupyter_list_open_notebooks

Notebooks abiertos con URIs, rutas, recuentos de celdas y marcas de sin guardar

jupyter_get_summary

Mapa compacto: IDs estables, tipos, estado de ejecución, tipos MIME de salida, vistas previas

jupyter_get_cell_source

Fuente de una celda por ID o índice basado en 0; paginación de líneas

jupyter_edit_cell

Reemplazar la fuente; el ID sigue siendo válido después

jupyter_insert_cell / jupyter_delete_cell

Ediciones estructurales en posiciones basadas en 0; IDs nuevos no reutilizables

jupyter_save_notebook

Persistir .ipynb en disco

jupyter_create_notebook

Crear un .ipynb vacío en disco y abrirlo en el editor

jupyter_run_cells

Inicio no bloqueante: rango de índices [start,end) o lista ordenada de IDs

jupyter_wait_until_idle

Sondea hasta quedar inactivo o agotar el tiempo de espera; devuelve celdas completadas + indicadores de éxito

jupyter_get_status

Instantánea inmediata: kernelStatus, información del runtime en vivo, celdas en ejecución, estado sin guardar

jupyter_interrupt_kernel

Abortar la ejecución actual, conservar las variables

jupyter_restart_kernel

Reinicio completo (borra las variables)

jupyter_get_outputs

Salidas en línea (texto corto) o archivos de artefacto en .jupyter-mcp/artifacts/

jupyter_get_variables

Informe de variables del kernel con información de tipos

jupyter_get_pip_packages

Inventario de paquetes instalados del entorno del kernel

jupyter_install_packages

Instalación de pip en el lado del kernel con especificaciones de versión + verificación posterior a la instalación

jupyter_select_kernel

Abrir el selector de kernel nativo, informar del estado resultante

IDs de celda estables

Cada celda recibe un ID persistente aleatorio (#NB-xxxxxxxx) escrito en el campo estándar cell id de nbformat 4.5 — el mismo hueco que la propia plataforma lee y conserva en guardado/carga. El ID es inmune a cambios de posición, ediciones de contenido, inserciones/eliminaciones de celdas adyacentes y ciclos de reapertura. Prefiere los IDs a los índices; llama a jupyter_get_summary para descubrirlos (también rellena los IDs que faltan en celdas creadas fuera de las herramientas).

La entrada de 8 dígitos hexadecimales sin prefijo (abcd1234) se acepta como abreviatura de #NB-abcd1234.

Agentes compatibles

Cualquier cliente MCP que hable HTTP funciona. Configuraciones comunes:

Claude Code, Cursor, Windsurf, Cline, Copilot:

{
  "mcpServers": {
    "jupyter-vscode-mcp": {
      "url": "http://localhost:9123/mcp"
    }
  }
}

OpenCode, Kilo Code:

{
  "mcp": {
    "jupyter-vscode-mcp": {
      "type": "remote",
      "url": "http://localhost:9123/mcp",
      "enabled": true
    }
  }
}

Ejecuta "Jupyter VS Code MCP: Show MCP Configuration" desde la paleta de comandos → elige tu agente → el fragmento se copia al portapapeles.

Instalación y ejecución

Descarga el .vsix más reciente desde Versiones, luego:

code --install-extension jupyter-vscode-mcp-<version>.vsix
  1. Abre cualquier .ipynb — el servidor se inicia automáticamente en 127.0.0.1:9123 (la barra de estado muestra el estado; haz clic para alternar).

  2. Añade la configuración de URL anterior a tu agente.

  3. Comprueba la disponibilidad en cualquier momento: curl http://localhost:9123/health.

Configuración: jupyter-vscode-mcp.mcpPort (por defecto 9123, aplicado en caliente), jupyter-vscode-mcp.autoStart (por defecto true).

Flujo de trabajo recomendado

jupyter_list_open_notebooks   → pick notebook
jupyter_get_summary           → stable #NB-* IDs, exec state        (0-based)
jupyter_get_cell_source       → read only what you need
jupyter_edit_cell             → IDs stay valid after edits
jupyter_run_cells             → starts async, returns immediately
jupyter_wait_until_idle       → blocks until done (or poll get_status)
jupyter_get_outputs           → inline short text, artifact files for big/binary
jupyter_get_variables         → inspect kernel state after runs

Arquitectura

AI agent ──HTTP/JSON-RPC──▶ VS Code extension (in-process http server :9123)
                                 │ vscode.* APIs + ms-toolsai.jupyter public API
                                 ▼
                     notebook cells, outputs, kernel status

Las interacciones con el kernel usan la API pública documentada ms-toolsai.jupyter (kernel.executeCode, comandos de interrupción/reinicio, comandos de listado de variables/pip) con respaldo de comandos; el seguimiento de la ejecución depende de workspace.onDidChangeNotebookDocument.

Desarrollo

npm install
npm run compile      # typecheck
npm run lint
npm run build        # esbuild bundle
npm run smoke        # local protocol smoke test (vscode stubbed)
npx @vscode/vsce package

Referencias

Licencia

MIT

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
    A
    quality
    D
    maintenance
    Enables AI agents to interact with Jupyter notebooks via MCP tools for querying, modifying, executing, and setting up notebooks, with state preservation and real-time collaboration.
    4
    44
    Apache 2.0
  • A
    license
    B
    quality
    B
    maintenance
    An MCP server that connects directly to a Jupyter kernel via ZMQ, enabling AI assistants to read, create, edit, execute, and manage Jupyter Notebooks as MCP tools.
    9
    MIT

View all related MCP servers

Related MCP Connectors

  • MCP server exposing the Backtest360 engine API as tools for AI agents.

  • MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.

  • Live browser debugging for AI assistants — DOM, console, network via MCP.

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/hadiproz/jupyter-vscode-mcp'

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