list_filesLABSCO SUMMARY
The notebook stays the workspace; the agent just gets to use it.
Because it drives a live kernel rather than a copy of the file, a failed cell's output is available for the next attempt — which is the difference between an agent that iterates and one that guesses twice and stops.
What it is
A server that connects to a running Jupyter server and drives notebooks in real time. Cell changes appear as they happen, and failed cells feed their output back so the next attempt is informed by what actually broke.
What you get
- Cell operations:
read_cell,insert_cell,delete_cell,move_cell,clear_cell_output,overwrite_cell_source, andedit_cell_sourcefor surgical find-and-replace without a full rewrite - Execution:
execute_cellwith a timeout and multimodal output including images,insert_execute_code_cellto add and run in one step, andexecute_codeto run directly in the active backend with magic and shell commands - Multiple notebooks:
use_notebookconnects to, creates or switches between notebooks, withlist_notebooks,read_notebook,restart_notebookandunuse_notebook - Server surfaces:
list_files,list_kernels, andconnect_to_jupyterfor switching servers without restarting the MCP server - Code sandboxes as an alternative execution backend:
launch_sandbox,list_sandboxes,use_sandboxandterminate_sandbox, covering variants from a local jupyter-server through Daytona, e2b, CoreWeave, Cloudflare, Kaggle, Google Colab and Modal - In JupyterLab mode, extra commands surface as tools —
notebook_run-all-cellsandnotebook_get-selected-cellare enabled by default - A
jupyter-citeprompt for citing specific cells from a notebook, the way@works in a coding IDE - Built-in hooks with OpenTelemetry integration for tracing tool calls and kernel executions
Requirements
A Jupyter you already run, local or JupyterHub — no account needed. Install the environment with pip install jupyterlab jupyter-collaboration ipykernel jupyter-mcp-tools, then start JupyterLab with a token, for example jupyter lab --port 8888 --IdentityProvider.token MY_TOKEN --ip 0.0.0.0. Real-time collaboration must be working: type in a cell and the tab's unsaved marker should turn into a saved dot on its own within a few seconds. Configure the client with uvx jupyter-mcp-server@latest and set JUPYTER_URL and JUPYTER_TOKEN, or run the published Docker image. Pin code-sandboxes to match: 1.1.1 or newer alongside jupyter-mcp-server 1.5.0 or newer, since the sandbox variant was renamed and an older server with a newer sandbox package fails on first execution. Datalayer also hosts the same server at https://mcp.datalayer.run/mcp with OAuth 2.1 sign-in and scoped approvals.
Setup effort
Follow the published steps — pip install jupyterlab jupyter-collaboration jupyter-mcp-tools ipykernel
USE CASES
Working through an analysis with an assistant
It inserts a cell, runs it, reads the output including plots and images, and adjusts — while you watch the notebook change in the browser.
Fixing a cell that failed
Cell output feeds back into the next attempt, and surgical edits change only the offending lines instead of rewriting the whole cell.
Moving between several notebooks in one session
Connect to another notebook, or create one, without restarting anything; the previous notebook is released explicitly rather than left holding resources.
Running the heavy part somewhere else
Launch a sandbox and route execution to it, then switch back — the same tools drive both, with GPU flavours available on the backends that support them.
Pointing at a different Jupyter mid-session
Connect to another server dynamically rather than hardcoding one and restarting the MCP server to change it.
24 tools
Listed in project docs. Your client may show a different list.
list_kernelslaunch_sandboxlist_sandboxesuse_sandboxterminate_sandboxconnect_to_jupyteruse_notebooklist_notebooksrestart_notebookunuse_notebookread_notebookread_cellinsert_celldelete_cellmove_cellclear_cell_outputoverwrite_cell_sourceedit_cell_sourceexecute_cellinsert_execute_code_cellexecute_codenotebook_run-all-cellsnotebook_get-selected-cellBEFORE YOU INSTALL
What to know first
Tools you get
24 tools named in the project's documentation.
Requires
- JupyterLab with jupyter-collaboration, running with a token (steps above) — or a JupyterHub
- uv 0.6.14 or higher for the uvx setup, or Docker for the Docker setups
- JUPYTER_URL and JUPYTER_TOKEN in the client configuration's env block
INSTALLATION
Connect your client
Server setup
Setup
pip install jupyterlab jupyter-collaboration jupyter-mcp-tools ipykernel
jupyter lab --port 8888 --IdentityProvider.token <YOUR_JUPYTER_TOKEN> --ip 0.0.0.0Hosted endpoint
https://mcp.datalayer.run/mcpAdd this hosted endpoint to your MCP client, then sign in.
MCP Clients
Any MCP client — uvx
{
"mcpServers": {
"jupyter": {
"command": "uvx",
"args": [
"jupyter-mcp-server@latest"
],
"env": {
"JUPYTER_URL": "http://localhost:8888",
"JUPYTER_TOKEN": "<YOUR_JUPYTER_TOKEN>",
"ALLOW_IMG_OUTPUT": "true"
}
}
}
}Needs uv 0.6.14 or higher (pip install uv). JUPYTER_TOKEN must match the token you started JupyterLab with, and the port in JUPYTER_URL the port it listens on.
Claude Code
/plugin marketplace add datalayer/jupyter-mcp-server
/plugin install datalayerDocker — macOS, Windows
{
"mcpServers": {
"jupyter": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"JUPYTER_URL",
"-e",
"JUPYTER_TOKEN",
"-e",
"ALLOW_IMG_OUTPUT",
"datalayer/jupyter-mcp-server:latest"
],
"env": {
"JUPYTER_URL": "http://host.docker.internal:8888",
"JUPYTER_TOKEN": "<YOUR_JUPYTER_TOKEN>",
"ALLOW_IMG_OUTPUT": "true"
}
}
}
}Docker — Linux
{
"mcpServers": {
"jupyter": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"JUPYTER_URL",
"-e",
"JUPYTER_TOKEN",
"-e",
"ALLOW_IMG_OUTPUT",
"--network=host",
"datalayer/jupyter-mcp-server:latest"
],
"env": {
"JUPYTER_URL": "http://localhost:8888",
"JUPYTER_TOKEN": "<YOUR_JUPYTER_TOKEN>",
"ALLOW_IMG_OUTPUT": "true"
}
}
}
}