使用说明
jupyter笔记本电脑mcp
用于加载、编辑、搜索和保存Jupyter笔记本的FastMCP服务器(.ipynb)通过MCP工具。
服务器一次保持一个笔记本打开,并使用实时单元格索引,这些索引会随着单元格的插入或删除而更新。
特性
- 具有内存中状态的单个活动笔记本会话(
path,笔记本对象,脏标志) - 加载其他笔记本之前自动保存当前笔记本
- 真正的插入/删除语义:索引在编辑后立即移动
- 加载时以纯文本块形式返回完整笔记本
- 以markdown块格式保存/导入笔记本内容
- 使用上下文片段进行不区分大小写的关键字搜索
- 可操作的
ToolError常见故障案例的消息
工具API
服务器公开了以下MCP工具:
load_notebook(path: str)- 加载并验证笔记本
- 首先自动保存当前打开的笔记本(如果有的话)
- 以纯文本块形式返回活动单元格:
[index:N type:...]+完整内容
save_notebook(path: str | None = None)- 保存当前笔记本(可选地保存到新路径)
read_cell(index: int)- 返回一个活动单元格的完整源代码
add_cell(content: str, cell_type: str = "code", index: int | None = None)- 在以下情况下附加新单元格
index省略 - 在引用的单元格下方插入
index提供(插入index + 1) - 返回已更改单元格+相邻单元格的纯文本块
- 在以下情况下附加新单元格
replace_cell(index: int, content: str)- 替换整个细胞源
remove_cell(index: int)- 按索引删除单元格,并立即重新索引
- 返回已更改单元格+相邻单元格的纯文本块
delete_cell(index: int)- 向后兼容的别名
remove_cell
- 向后兼容的别名
save_markdown(path: str)- 保存由返回的相同文本
load_notebook()到markdown文件路径
- 保存由返回的相同文本
from_markdown(path: str)- 从磁盘读取导出的标记块并替换当前的笔记本单元格
search_cell(keywords: str)- 空格分隔的关键字搜索(所有关键字必须匹配)
需求
- python
>=3.12 uv用于环境和依赖关系管理
MCP安装
直接与 uvx (无持久安装):
uvx jupyter-notebook-mcp --from git+https://github.com/g0g5/jupyter-notebook-mcp
安装为 uv 工具:
uv tool install jupyter-notebook-mcp --from git+https://github.com/g0g5/jupyter-notebook-mcp
快速开始
uv sync
uv run python -m jupyter_notebook_mcp
您还可以通过项目脚本入口点运行:
uv run jupyter-notebook-mcp
MCP客户端配置(stdio)
使用以下配置之一。
选项1:运行 uvx 来自GitHub:
{
"mcpServers": {
"jupyter-notebook-mcp": {
"command": "uvx",
"args": [
"jupyter-notebook-mcp",
"--from",
"git+https://github.com/g0g5/jupyter-notebook-mcp"
]
}
}
}
选项2:之后 uv tool install,直接运行installed命令:
{
"mcpServers": {
"jupyter-notebook-mcp": {
"command": "jupyter-notebook-mcp",
"args": []
}
}
}
发展
安装/更新依赖关系:
uv sync
类型检查(轻量级编译检查):
uv run python -m py_compile jupyter_notebook_mcp/*.py tests/*.py
运行测试:
uv run pytest -v
项目结构
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.py
行为说明
- 如果未加载笔记本,则依赖笔记本的工具将返回:
No notebook is loaded. Use load_notebook(path) first.
- 细胞指数始终是当前活跃指数;插入/删除操作会重新索引以下单元格。
- 保存时,服务器通过以下方式验证笔记本结构
nbformat.validate在写作之前。
