使用说明
Jupyter MCP服务器
A专注 模型上下文协议 用于安全读取的服务器, 用于创建、编辑和执行一个实时Jupyter笔记本。
实现故意保持小规模:一个笔记本电脑、一个内核和标准 stdio
运输。操作共享会话锁,代码被追加并执行一次
服务器等待内核的最终执行回复,而不是第一个可见的输出。
它暴露了什么
| MCP图元 | 名称 | 用途 |
|---|---|---|
| 工具 | add_markdown_cell |
添加并验证一个标记单元格 |
| 工具 | add_execute_code_cell |
追加一次、执行一次并返回结构化输出 |
| 工具 | read_notebook_content |
读取一致的笔记本快照 |
| 工具 | kernel_restart |
干净地替换当前内核/会话 |
| 资源 | jupyter://notebook |
只读笔记本JSON |
| 提示 | analyse_notebook |
更换笔记本前进行分析 |
HTML、图像、JSON、流、结果和回溯数据保留在结构化输出模型中。 执行失败、超时和未知结果是MCP错误,而不是成功字符串。
需求
- Python 3.10或更高版本(推荐3.12)
- 启用实时协作的JupyterLab服务器
uv(推荐)或pip
本地设置
安装服务器和开发工具:
uv sync --extra dev
创建有效的笔记本文档(空文件不是笔记本):
uv run python -c "import nbformat; nbformat.write(nbformat.v4.new_notebook(), 'notebook.ipynb')"
在另一个环境或终端中,安装并启动Jupyter:
uv run --with jupyterlab --with jupyter-collaboration \
jupyter lab \
--port 8888 \
--ServerApp.port_retries 0 \
--ServerApp.root_dir . \
--IdentityProvider.token MY_TOKEN \
--no-browser
运行MCP服务器:
NOTEBOOK_PATH=notebook.ipynb \
SERVER_URL=http://localhost:8888 \
TOKEN=MY_TOKEN \
uv run jupyter-mcp
服务器在首次使用时打开Jupyter连接,因此导入包或列出MCP工具 不需要运行Jupyter。
MCP客户端配置
为启动本地的客户端使用以下形状 stdio 服务器,替换存储库
结账路径:
{
"mcpServers": {
"jupyter": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/jupyter_mcp_server_kshitij",
"run",
"jupyter-mcp"
],
"env": {
"NOTEBOOK_PATH": "notebook.ipynb",
"SERVER_URL": "http://localhost:8888",
"TOKEN": "MY_TOKEN"
}
}
}
}
配置
| 变量 | 默认值 | 描述 |
|---|---|---|
NOTEBOOK_PATH |
notebook.ipynb |
相对于Jupyter服务器根的路径 |
SERVER_URL |
http://localhost:8888 |
Jupyter服务器URL |
TOKEN |
空 | Jupyter身份验证令牌;在运行时设置它 |
CONNECTION_TIMEOUT_SECONDS |
15 |
启动、清理和中断超时 |
EXECUTION_TIMEOUT_SECONDS |
30 |
最大内核执行时间 |
CONNECTION_ATTEMPTS |
2 |
突变前连接尝试 |
连接重试仅在发生突变之前发生。一旦执行开始,断开连接就会产生 显式的“结果未知”错误,单元格永远不会自动重复。
码头工人
构建并运行非根映像。令牌没有映像默认值,必须在运行时提供:
docker build -f dockerfile -t jupyter-mcp .
docker run --rm -i \
-e NOTEBOOK_PATH=notebook.ipynb \
-e SERVER_URL=http://host.docker.internal:8888 \
-e TOKEN=MY_TOKEN \
jupyter-mcp
发展
uv run pytest
uv run ruff check .
单元测试使用假笔记本和内核客户端;它们不需要实时的Jupyter服务器。 对于端到端检查,如上所示启动Jupyter,并使用MCP客户端或 MCP检查员。
安全和生命周期保证
- 导入模块不执行网络I/O。
- MCP生命周期清理在正常或异常关机时关闭笔记本电脑和内核客户端。
- 一
asyncio.Lock防止并发笔记本突变、执行、读取和重新启动。 - 使用笔记本客户端的公共序列/导出API;私有的
_doc和_ycells内部结构 无法访问。 - 内核错误和超时成为MCP错误。一个超时的内核被中断,一个不确定的 会话在重用之前被丢弃。
- 标准
stdio运输已启用;不存在静默的原始TCP回退。