VS Code Jupyter MCP Server
Allows external agents to run, edit, create, and manage Jupyter notebooks inside VS Code, including executing cells, retrieving outputs, and exporting notebooks.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@VS Code Jupyter MCP ServerRun cell 3 in the active notebook and return the output"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
VS Code Jupyter MCP Server
A notebook-specific MCP server that runs inside VS Code and lets an external agentic harness (Command Code CLI/desktop, Claude, etc.) run, edit, create, and manage the Jupyter notebook the user is actively editing — headlessly, with no approval dialogs, and no Copilot/Cursor dependency.
The objective (and how it differs from similar projects)
This extension is built for one specific workflow: an outside agent drives the notebook the human is looking at. The agent connects over MCP, operates on the same in-memory NotebookDocument the user sees in the editor, and every change appears instantly with full undo/redo.
That objective drives every design choice:
External, harness-agnostic — any MCP client works; nothing is tied to VS Code's Copilot Chat or Cursor agents. The tools use the VS Code notebook API directly — no
vscode.lm.invokeTool, no Copilot-tool contributions, no approval dialogs, no chat-stream requirements (microsoft/vscode#319094 is why).User-editing notebook as the source of truth — tools target open
NotebookDocuments, not.ipynbfiles on disk, so kernel state and unsaved edits are never out of sync.Jupyter-optional — kernel tools (
run_cells,restart_notebooks) are only exposed when the Jupyter extension is installed; all document tools (create, read, edit, move, open, save) work with VS Code's native notebook support alone, even in an empty window with no workspace.Deterministic, CI-friendly testing — a shim-based MCP test suite with enforced coverage thresholds runs identically on every platform (no GUI, no VS Code download).
How this compares to similar projects
Project | Approach | Objective | Notable features |
| Daemon + per-window bridge workers, URI routing, operation-streaming | In-editor notebook agents (VS Code/Copilot ecosystem) | 19 tools; daemon routing; operation streaming; source of the whole-notebook read, cell anchors, and export we adopted |
| In-extension MCP server, active-editor based | Same-space agents (Cursor/Claude) | 15 tools; output-capturing run; source of our execution-wait + output-return pattern |
| File-based | File editing only | Cannot execute |
| Standalone Jupyter Server API | Remote JupyterLab/JupyterHub | Separate server; second source of truth |
This extension | In-extension MCP server + multi-window registry | External agentic harness driving the user's live notebook | Jupyter-optional; empty-window create; deterministic coverage-gated CI; 13 tools incl. output-capturing run, whole-notebook read, cell anchors, export |
We have deliberately adopted the best ideas from the closest projects (output-capturing execution, whole-notebook reads, stable cell_id anchors, export) while keeping our distinct objective: serving an external harness against the user's live notebook, with no Copilot/Cursor dependency and Jupyter-optional operation.
Related MCP server: Jupyter MCP Server
Tools
All tools are multi-capable (they take arrays; a single operation is a 1-element array) — no separate singular/plural variants.
Tool | Category | Description |
| Create | Create a new notebook (file in a workspace, or untitled in an empty window) and open it |
| Read | List open notebooks across all VS Code windows ( |
| Read | Whole-notebook read in one call: cell index, stable |
| Read | Metadata for one or more notebooks (cell kind, language, lines, execution state, output mime types) — no content |
| Read | Read the source of cells (by index or |
| Read | Read saved outputs of cells (all items, decoded) |
| Write | Insert/edit/delete cells in order; optional per-edit metadata; optional re-run |
| Write | Move one or more cells to a new position (preserves content/outputs/metadata) |
| Execute | Run one or more cells headlessly, in order, waiting for completion and returning parsed outputs (text/error/image); optional |
| Manage | Restart the kernel of one or more notebooks |
| Manage | Open existing notebooks from disk (file: URIs) |
| Manage | Persist dirty notebooks to disk |
| Manage | Export a notebook to markdown / python / html |
Jupyter-extension guard
Tools that require a kernel — run_cells and restart_notebooks — are only exposed when the Jupyter extension (ms-toolsai.jupyter) is installed. The remaining tools work with VS Code's native notebook support alone, so an empty VS Code window with no workspace and no Jupyter extension can still create a notebook from scratch and edit/read it. Install the Jupyter extension to unlock kernel-backed execution.
Recommended flow
get_notebooks→ pick the notebook URIread_notebook(orget_cellsmetadata) → see the notebook's structure/stateedit_cells→ write/change cellsrun_cells→ execute cells headlessly and get outputs backget_cells_output(orread_notebookwith outputs) → read resultssave_notebooks→ persist;export_notebook→ share
Why a VS Code extension?
Notebook execution, kernels, and the Jupyter extension's tools exist only inside the VS Code extension host. A standalone MCP process can't reach them. This extension is the bridge that lives inside VS Code and exposes them over MCP.
Why native tools instead of forwarding Copilot's?
The VS Code notebook API covers all the functionality natively — cell execution (notebook.execute), reading cells/outputs (cell.outputs, executionSummary), kernel restart (notebook.restartKernel) — so the server implements everything itself. This avoids the problems with forwarding Copilot's tools via vscode.lm.invokeTool:
Tool-approval dialogs for execution tools invoked outside a live chat session (
chat.tools.autoApprovedoesn't suppress these — microsoft/vscode#319094)Stream requirements for interactive tools (edit/create need a chat stream)
Coupling to Copilot Chat's tool contributions and their schemas
The native implementation is fully headless, self-contained, and works even if Copilot Chat's tools change.
Multi-window merge
Multiple VS Code windows running this extension with the same port setting merge into one MCP server:
The first window binds the port and serves; later windows detect
EADDRINUSEand merge (register in a shared registry, serve nothing locally).get_notebooksreturns notebooks from the owning window plus all registered windows (withwindowId/windowLabel).When the same file is open in multiple windows, the model should disambiguate (e.g. ask which window) before targeting operations; cell operations run in the window that owns the notebook.
When the owning window closes, the registry heartbeat lets another window take over on its next attempt.
Install & run
Install the extension (F5 = Extension Development Host) in a VS Code window with the Jupyter extension (
ms-toolsai.jupyter) installed.Check the output channel
Jupyter MCP Serverfor the URL, e.g.MCP server listening on http://127.0.0.1:51303/mcp.Add to Command Code:
cmdc mcp add --transport http jupyter http://127.0.0.1:51303/mcp(or stdio: set
jupyterMcp.transporttostdioandcmdc mcp add jupyter -- node <extension>/dist/extension.js)
Configuration
Setting | Default | Description |
|
| Enable the MCP server |
|
|
|
|
| Fixed port; multiple windows sharing it merge into one server |
|
| Save dirty notebooks before run/edit |
Testing
npm test runs two deterministic MCP integration suites (src/test/mcp.test.js + src/test/mcp.jupyter.test.js): they load the compiled extension bundle with a vscode shim and exercise every tool over a real MCP HTTP connection (connect → tools/list → tools/call). The first suite models an empty window (no workspace, no Jupyter) and asserts the tool set (kernel tools absent) plus every document operation; the second models Jupyter present and covers run_cells (output capture), read_notebook, export_notebook, and cell_id anchors.
npm run coverage additionally measures coverage with c8 (sourcemap-remapped to src/**, merged across both suites) and enforces thresholds (statements/lines ≥75%, branches ≥55%, functions ≥85%) via src/test/checkCoverage.js. Both are wired into GitHub Actions CI (.github/workflows/ci.yml, matrix: ubuntu/windows/macos).
Notes / limitations
Notebooks must be open in VS Code to be listed/read/edited (
get_notebookslists open ones). Creating a new notebook works from the workspace (or as an untitled notebook in an empty window).Requires the Jupyter extension (
ms-toolsai.jupyter) for kernel-backed execution;run_cellsuses the notebook's current kernel.Cell references use 0-based indices (
cellIds) — after an edit, re-fetchget_cellsfor fresh indices.Workspace-trust / tool-approval dialogs do not apply to these native tools (they use the VS Code notebook API, not
invokeTool).
License
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
- Alicense-qualityBmaintenanceExposes VSCode Jupyter notebooks to MCP-compatible AI agents, enabling them to read, edit, and run cells against the same kernel.Last updatedMIT
- AlicenseAqualityDmaintenanceEnables 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.Last updated443Apache 2.0
- Alicense-qualityAmaintenanceEnables AI assistants to leverage VS Code's language intelligence for code navigation, refactoring, and analysis via the MCP protocol.Last updatedMIT
- Alicense-qualityDmaintenanceEnables AI agents to read, edit, execute cells, and capture outputs from Jupyter notebooks directly within VS Code or Cursor via the Model Context Protocol.Last updated2115MIT
Related MCP Connectors
User-owned memory for AI agents, Copilot, Claude, IDEs, CLIs, and chat apps over remote MCP.
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
Read and write your Fresh Jots notes from Claude, Cursor, and any MCP client.
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/Happypig375/vscode-jupyter-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server