Jupiter Controller MCP
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., "@Jupiter Controller MCPList all kernels and show their status."
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.
Jupiter Controller MCP (jkb-mcp)
Connects Claude Code to local Jupyter kernels as a set of native tools:
start/restart/shutdown kernels, run code against a live kernel (including one
backing a VS Code notebook), get stdout, results, errors and plots back, and
execute whole notebooks with outputs saved into the .ipynb. The client never
needs to know the kernel's connection details.
Built and tested with Claude Code on Windows. It is a standard MCP server over stdio, so other MCP clients should work too, but they are untested.
Security warning: this tool executes arbitrary code inside your live Jupyter kernel process, with that process's full OS privileges, exactly as if you typed it into the notebook yourself. Execution ships disabled by default; see "Enabling execution" below.
The realistic threat is not just a misbehaving client. It is untrusted data flowing through a trusted client (prompt injection): a notebook, CSV, or web page containing adversarial text can steer the model into running exfiltration or destructive code. Mitigations built in: the tool-based opt-in is session-scoped (dies with the server process; persistent enablement requires you to edit the config file yourself), and a
disable_executiontool can always turn it off. Still: be deliberate about which files and data you let the model read while execution is enabled.
Requirements
Windows
Python 3.11+
Optional: VS Code with an active Jupyter kernel, if you want to attach to an existing notebook session.
start_kernelcan otherwise run everything standalone.
Related MCP server: JupyterMCP
Install
pip install git+https://github.com/nufelroknidev/jupyter-kernel-bridge-mcp.gitOr from a local clone:
git clone https://github.com/nufelroknidev/jupyter-kernel-bridge-mcp.git
pip install ./jupyter-kernel-bridge-mcpVerify it installed correctly:
jkb-mcp --helpIf jkb-mcp isn't found, your Python Scripts directory isn't on PATH. Use
the full path shown by pip show -f jkb-mcp, or activate the venv you
installed into.
Enabling execution
The server ships with code execution off. list_kernels and get_config
always work; every tool that executes code or mutates kernel state refuses
until you opt in, one of two ways:
Via the client (session-scoped): call the
enable_executiontool withconfirm="I understand the risk". This enables execution only until the MCP server process restarts. It is deliberately never persisted, so the model (or injected instructions in data it read) can't quietly enable execution forever.Manually (persistent): edit
%APPDATA%\jkb-mcp\config.jsonand set"execution_enabled": true, then restart the MCP server (config is cached at startup).
disable_execution turns it off again at any time. It clears the session
flag and the config-file flag.
Register with Claude Code
claude mcp add jkb-mcp -- jkb-mcpAdd -s user to make it available in every project on this machine, not just
the current one:
claude mcp add jkb-mcp -s user -- jkb-mcpNo absolute paths are involved; jkb-mcp resolves through whatever Python
environment you installed the package into.
Teaching Claude Code about this server
The server ships its own usage guide as MCP server instructions (the
recommended workflow, kernel-addressing semantics, and security rules), which
Claude Code surfaces to the model automatically, so no context-file setup is
required. If you want the model to reach for these tools more proactively,
add a note like this to your project's CLAUDE.md:
All Jupyter-notebook work goes through the
jkb-mcpMCP server: enable execution once per session (enable_execution), start or attach to a kernel (start_kernel/list_kernels), iterate withrun_python, and persist results into the.ipynbwithexecute_notebook. Do not run notebook code through plainpythonsubprocesses.
The "Tool reference" table below covers every tool and its parameters.
Tool reference
Tool | Gated? | Description |
| No | Lists detected kernel connection files with age and status: |
| No | Shows current settings (execution enabled?, output limits, retention). |
| - | Enables execution for this session only (resets on server restart). Requires |
| - | Disables execution: clears the session opt-in and the config-file flag. |
| Yes | Executes code in a live kernel; returns text output and inline images. |
| Yes | Reads a local |
| Yes | Stops a stuck/runaway cell and confirms whether the interrupt landed. |
| Yes | Starts a fresh kernel owned by this server, no VS Code needed. Supports real restart/shutdown. |
| Yes | Real process restart for server-owned kernels; best-effort protocol restart request for external (VS Code) kernels. |
| Yes | Shuts down a server-owned kernel. Refuses kernels owned by other apps. |
| Yes | Runs a |
| Yes | Lists user variables in the kernel namespace with type, shape/length, size. |
| Yes | Deep preview of one variable: type, shape/dtypes, DataFrame columns + head(), capped repr. |
| No | Lists installed kernelspecs usable with |
| No | Shows cell indices/types/first lines + saved-output status for |
kernel parameter: 0 (the default) auto-selects the most recent kernel
that responds to a health check, silently falling back to the next-most-recent
if it's unresponsive. Any other explicit index is honored exactly: it fails
with a clear message rather than silently substituting a different kernel.
Because indices are positions in the newest-first list, they shift when new
kernels appear; to target a specific kernel reliably across calls, pass its
connection-file name (or a unique substring of it) from list_kernels
instead, e.g. kernel="kernel-jkb-1a2b3c.json".
Troubleshooting
Message | Cause | Fix |
"No Jupyter kernel connection files found..." | No | Open a notebook in VS Code and run a cell. |
"Found N kernel connection file(s) but none responded..." | The kernel process(es) behind those files are closed | Restart the notebook's kernel (run a cell again). |
"Kernel index N ... did not respond to a health check" | You asked for a specific kernel index and it's dead | Use |
"Kernel N is currently busy running another request..." | Two calls hit the same kernel at once | Wait for the first to finish, or use a different kernel index. |
"... is malformed or incomplete..." | A connection file was partially written or corrupted | It's skipped automatically; this is informational, not fatal. |
"Execution exceeded the timeout..." | Your cell ran past the | Partial output (if any) is included. The kernel was interrupted; on Windows this can take a few seconds to land. |
"Code execution is disabled..." | The safety gate is off (the default) | See "Enabling execution" above. |
Data locations
What | Where |
Config (execution gate, limits) |
|
Logs |
|
Captured images |
|
Nothing is ever logged above DEBUG level for the actual code/output content, since kernel output can contain secrets. Only short previews and outcomes are logged at INFO.
Uninstall
pip uninstall jkb-mcp
claude mcp remove jkb-mcpOptionally also delete %APPDATA%\jkb-mcp and %LOCALAPPDATA%\jkb-mcp.
License
PolyForm Noncommercial 1.0.0: free for personal, research, educational,
and other noncommercial use. Commercial use requires a separate paid
license from the copyright holder: nufel.rokni.dev@gmail.com. See LICENSE
for full terms.
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.
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/nufelroknidev/Jupyter-kernel-bridge-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server