MCP Directory

Jupyter MCP Server

Official

Connect AI to Jupyter Notebooks in real-time — run cells, read outputs, and manage multiple notebooks.

Unverified
stdio (local)
API key
Python

Add to your client

Copy the config for your MCP client and paste it into its config file.

Install / run
uvx jupyter-mcp-server@latest

Paste into ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "jupyter-mcp-server": {
      "command": "uvx",
      "args": [
        "jupyter-mcp-server@latest"
      ],
      "env": {
        "JUPYTER_URL": "http://localhost:8888",
        "JUPYTER_TOKEN": "MY_TOKEN",
        "ALLOW_IMG_OUTPUT": "true"
      }
    }
  }
}

Requires `uv` (the Python package runner). Install it from https://docs.astral.sh/uv/ if `uvx` is not found.

Step-by-step guides: Add to Claude Desktop · Add to Cursor · Add to Windsurf

Before you start

  • A running JupyterLab / Jupyter server (e.g. jupyterlab==4.4.1 with jupyter-collaboration, jupyter-mcp-tools, ipykernel, pycrdt)
  • uv / uvx (0.6.14+) for the quick-start method, or Docker for the production method
  • A Jupyter server token (JUPYTER_TOKEN) and, since v1.0.0, MCP_TOKEN configured in the MCP client

About Jupyter MCP Server

An MCP server developed by Datalayer for AI to connect and manage Jupyter Notebooks in real-time. It offers real-time control to view notebook changes as they happen, smart execution that adjusts based on cell output feedback, context awareness across the entire notebook, multimodal output support, and seamless switching between multiple notebooks. It integrates with JupyterLab to expose additional commands as MCP tools and includes a built-in hook system with OpenTelemetry integration for observability. Compatible with local Jupyter, JupyterHub, and Datalayer-hosted notebooks.

Tools & capabilities (19)

list_files

List files and directories in the Jupyter server's file system.

list_kernels

List all available and running kernel sessions on the Jupyter server.

connect_to_jupyter

Connect to a Jupyter server dynamically without restarting the MCP server. Not available when running as a Jupyter extension.

use_notebook

Connect to a notebook file, create a new one, or switch between notebooks.

list_notebooks

List all notebooks available on the Jupyter server and their status.

restart_notebook

Restart the kernel for a specific managed notebook.

unuse_notebook

Disconnect from a specific notebook and release its resources.

read_notebook

Read notebook cells source content with brief or detailed format options.

read_cell

Read the full content (metadata, source and outputs) of a single cell.

insert_cell

Insert a new code or markdown cell at a specified position.

delete_cell

Delete a cell at a specified index.

move_cell

Move a cell from one position to another within a notebook.

overwrite_cell_source

Overwrite the source code of an existing cell.

edit_cell_source

Apply surgical find-and-replace edits to a cell's source without a full rewrite.

execute_cell

Execute a cell with timeout, supports multimodal output including images.

insert_execute_code_cell

Insert a new code cell and execute it in one step.

execute_code

Execute code directly in the kernel, supports magic commands and shell commands.

notebook_run-all-cells

Execute all cells in the current notebook sequentially. Available only in JupyterLab mode.

notebook_get-selected-cell

Get information about the currently selected cell. Available only in JupyterLab mode.

When to use it

  • Letting an AI assistant run and iterate on Jupyter notebook cells with live output feedback
  • Automating data science workflows (data cleaning, feature engineering, model training/evaluation) step-by-step
  • Reading, inserting, editing, moving, and deleting notebook cells programmatically from an MCP client
  • Working across multiple notebooks and kernels, including multimodal outputs like plots and images

Security notes

Requires a Jupyter server token (JUPYTER_TOKEN) for authentication; as of v1.0.0 you must also configure MCP_TOKEN in your MCP client setup. The server connects to a running Jupyter/JupyterLab instance and can execute arbitrary code in its kernels, so treat the configured Jupyter endpoint and its token as sensitive.

Jupyter MCP Server FAQ

Which transports are supported?

The quick-start uses STDIO transport with uvx (or Docker). The documentation also covers Streamable HTTP transport and running as a Jupyter Server extension.

Do I need to install datalayer_pycrdt?

No. As of v1.0.2, pycrdt is supported directly, so installing datalayer_pycrdt is no longer required.

What changed in v1.0.0?

v1.0.0 introduced a breaking change requiring you to configure MCP_TOKEN in your MCP client setup.

Does it support image and plot outputs?

Yes, it has multimodal support for images, plots, and text. Set ALLOW_IMG_OUTPUT to false if your LLM does not support multimodal understanding, and use an MCP client that can parse returned image data.

Alternatives to Jupyter MCP Server

Compare all alternatives →

Official MCP server providing persistent, file-backed knowledge-graph memory across sessions.

Verified
stdio (local)
No auth
TypeScript
9 tools
Updated 5 months agoRepo

Structured step-by-step reasoning tool for breaking problems into revisable thought sequences.

Verified
stdio (local)
No auth
TypeScript
1 tool
Updated 6 months agoRepo

Fully managed remote server for AWS docs, blogs, What's-New and Well-Architected guidance — no key.

Verified
HTTP (remote)
No auth
Hosted
6 tools
Updated 5 months agoRepo