jupyter-notebook-mcp
Provides tools for loading, editing, searching, and saving Jupyter notebooks (.ipynb) through an MCP interface.
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., "@jupyter-notebook-mcpload my notebook experiments.ipynb"
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.
jupyter-notebook-mcp
A FastMCP server for loading, editing, searching, and saving Jupyter notebooks (.ipynb) through MCP tools.
The server keeps one notebook open at a time and uses live cell indices that update as cells are inserted or removed.
Features
Single active notebook session with in-memory state (
path, notebook object, dirty flag)Autosave current notebook before loading a different notebook
Real insert/remove semantics: indices shift immediately after edits
Return full notebook as plain-text blocks when loading
Save/import notebook content in markdown block format
Case-insensitive keyword search with contextual snippets
Actionable
ToolErrormessages for common failure cases
Related MCP server: Jupyter MCP Server
Tool API
The server exposes the following MCP tools:
load_notebook(path: str)Loads and validates a notebook
Autosaves the currently open notebook first (if any)
Returns active cells as plain-text blocks:
[index:N type:...]+ full content
save_notebook(path: str | None = None)Saves current notebook (optionally to a new path)
read_cell(index: int)Returns full source for one active cell
add_cell(content: str, cell_type: str = "code", index: int | None = None)Appends a new cell when
indexis omittedInserts below the referenced cell when
indexis provided (insert atindex + 1)Returns plain-text blocks for changed cell + adjacent cells
replace_cell(index: int, content: str)Replaces entire cell source
remove_cell(index: int)Removes a cell by index with immediate reindexing
Returns plain-text blocks for changed cell + adjacent cells
delete_cell(index: int)Backward-compatible alias of
remove_cell
save_markdown(path: str)Saves the same text returned by
load_notebook()to a markdown file path
from_markdown(path: str)Reads exported markdown blocks from disk and replaces current notebook cells
search_cell(keywords: str)Space-separated keyword search (all keywords must match)
Requirements
Python
>=3.12uvfor environment and dependency management
MCP Installation
Run directly with uvx (no persistent install):
uvx jupyter-notebook-mcp --from git+https://github.com/g0g5/jupyter-notebook-mcpInstall as a uv tool:
uv tool install jupyter-notebook-mcp --from git+https://github.com/g0g5/jupyter-notebook-mcpQuick Start
uv sync
uv run python -m jupyter_notebook_mcpYou can also run via the project script entrypoint:
uv run jupyter-notebook-mcpMCP Client Configuration (stdio)
Use one of the following configurations.
Option 1: run with uvx from GitHub:
{
"mcpServers": {
"jupyter-notebook-mcp": {
"command": "uvx",
"args": [
"jupyter-notebook-mcp",
"--from",
"git+https://github.com/g0g5/jupyter-notebook-mcp"
]
}
}
}Option 2: after uv tool install, run installed command directly:
{
"mcpServers": {
"jupyter-notebook-mcp": {
"command": "jupyter-notebook-mcp",
"args": []
}
}
}Development
Install/update dependencies:
uv syncTypecheck (lightweight compile check):
uv run python -m py_compile jupyter_notebook_mcp/*.py tests/*.pyRun tests:
uv run pytest -vProject Structure
jupyter-notebook-mcp/
|- jupyter_notebook_mcp/
| |- __main__.py # Module entrypoint for `python -m jupyter_notebook_mcp`
| |- server.py # FastMCP app and tool registration
| |- session.py # Shared in-memory notebook session state
| |- notebook_io.py # Notebook load/save and validation
| |- cell_ops.py # Cell read/edit operations
| |- markdown_codec.py # Markdown export/import parsing
| |- search.py # Keyword search and snippet extraction
| \- formatting.py # Cell block and markdown preview formatting
\- tests/
|- conftest.py # Shared fixtures (session reset)
|- helpers.py # Shared notebook test helpers
|- test_contract_flow.py
|- test_session_and_io.py
|- test_cell_editing.py
|- test_markdown_codec.py
\- test_search_and_formatting.pyBehavior Notes
If no notebook is loaded, notebook-dependent tools return:
No notebook is loaded. Use load_notebook(path) first.
Cell indices are always current active indices; insert/remove operations reindex following cells.
On save, the server validates notebook structure with
nbformat.validatebefore writing.
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
- FlicenseAqualityDmaintenanceProvides tools for interacting with Jupyter notebooks, allowing users to read, add, and execute notebook cells. It supports full notebook execution and metadata retrieval through the FastMCP framework.Last updated52
- AlicenseAqualityDmaintenanceAI-powered MCP server for connecting and managing Jupyter Notebooks. Enables interactive code execution, multi-notebook management, and multimodal output for data analysis, visualization, and machine learning.Last updated129MIT
- Alicense-qualityDmaintenanceAn MCP server for programmatically editing Jupyter notebooks, offering 29 tools for reading, modifying, and batch-processing notebooks without requiring a Jupyter server.Last updated3MIT
- Flicense-qualityCmaintenanceA local MCP server for reading, writing, and executing Jupyter notebooks using jupyter_client for direct kernel communication.Last updated
Related MCP Connectors
Remote MCP server for full read/write access to a Zotero library
MCP server for AgentDocs (agentdocs.eu): read, search, write, comment on & share Markdown docs.
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
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/g0g5/jupyter-notebook-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server