JupyterMCP 将 Jupyter Notebook 通过模型上下文协议 (MCP) 连接到 Claude AI,使 Claude 能够直接与 Jupyter 笔记本进行交互和控制。这种集成使得能够实现 AI 辅助的代码执行、数据分析、可视化等功能。
此工具仅兼容 Jupyter Notebook 版本 6.x。
它不支持以下版本:
系统由三个主要组件组成:
jupyter_ws_server.py):在 Jupyter 中设置一个 WebSocket 服务器,以桥接笔记本和外部客户端之间的通信client.js):在笔记本中运行以处理操作(插入单元格、执行代码等)jupyter_mcp_server.py):实现模型上下文协议并连接到 WebSocket 服务器uv 包管理器如果你使用的是 Mac:
brew install uv
在 Windows(PowerShell)上:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
对于其他平台,请参阅 uv 安装指南。
将此仓库克隆或下载到你的计算机:
git clone https://github.com/jjsantos01/jupyter-notebook-mcp.git
创建虚拟环境并安装所需的包,以及 jupyter-mcp 内核,以便它可以被你的 Jupyter 安装识别(如果之前已经安装过)。
uv run python -m ipykernel install --name jupyter-mcp
(可选)安装额外的 Python 包用于分析:
uv pip install seaborn
配置 Claude 桌面集成:
前往 Claude > 设置 > 开发者 > 编辑配置 > claude_desktop_config.json 并包括以下内容:
{
"mcpServers": {
"jupyter": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/PARENT/REPO/FOLDER/src",
"run",
"jupyter_mcp_server.py"
]
}
}
}
将 /ABSOLUTE/PATH/TO/ 替换为你系统中 src 文件夹的实际路径。例如:
"C:\\Users\\MyUser\\GitHub\\jupyter-notebook-mcp\\src\\"/Users/MyUser/GitHub/jupyter-notebook-mcp/src/如果你之前已经打开了 Claude,则需要 文件 > 退出 再重新打开。
启动你的 Jupyter Notebook(版本 6.x)服务器:
uv run jupyter nbclassic
创建一个新的 Jupyter Notebook,并确保选择 jupyter-mcp 内核:内核 -> 更改内核 -> jupyter-mcp
在笔记本单元格中运行以下代码以初始化 WebSocket 服务器:
import sys
sys.path.append('/path/to/jupyter-notebook-mcp/src') # 添加脚本所在位置的路径
from jupyter_ws_server import setup_jupyter_mcp_integration
# 在 Jupyter 中启动 WebSocket 服务器
server, port = setup_jupyter_mcp_integration()
不要忘记替换这里的 '/path/to/jupyter-notebook-mcp/src' 为你的系统中的 src 文件夹路径。例如:
"C:\\Users\\MyUser\\GitHub\\jupyter-notebook-mcp\\src\\"/Users/MyUser/GitHub/jupyter-notebook-mcp/src/
启动启用 MCP 的 Claude 桌面应用。
一旦连接成功,Claude 将可以访问以下工具:
ping - 检查服务器连通性insert_and_execute_cell - 在指定位置插入单元格并执行save_notebook - 保存当前 Jupyter 笔记本get_cells_info - 获取笔记本中所有单元格的信息get_notebook_info - 获取当前笔记本的信息run_cell - 根据索引运行特定单元格run_all_cells - 运行笔记本中的所有单元格get_cell_text_output - 获取特定单元格的输出内容get_image_output - 获取特定单元格的图像输出edit_cell_content - 编辑现有单元格的内容set_slideshow_type - 设置单元格的幻灯片类型这是一个实验项目,应谨慎使用。此工具会在你的计算机上运行任意 Python 代码,如果不小心使用可能会修改或删除数据。始终备份重要的项目和数据。
请求 Claude 执行笔记本操作:
你有一个 Jupyter Notebook 服务器。
我需要创建一个关于 Python 的 Seaborn 库的演示。
内容如下:
- 什么是 Seaborn?
- 长数据格式 vs. 宽数据格式
- Seaborn 相比 Matplotlib 的优势
- 常用的 Seaborn 函数
- 实时演示(Seaborn vs. Matplotlib 的比较)
- 条形图
- 折线图
- 散点图
对于每个概念,我希望在 Markdown 单元格中提供主要解释,然后跟随一个或多个 Python 代码单元格来展示其用法。保持文本简洁——每个单元格不应超过 10 行。
为每个单元格设置适当的幻灯片类型,使其演示更具视觉吸引力。
对于这个示例,你需要 Stata 软件(v17 或更高版本),该软件不是开源的。如果你已经有 Stata,你需要安装 stata-setup 包:
uv pip install stata-setup
然后,在笔记本的开始部分,你需要额外包含:
import stata_setup
stata_setup.config('your_stata_installation_directory', 'your_stata_edition')
这个练习来自 John Robert Warren 教授的网页
你有一个 Jupyter Notebook 服务器。默认情况下它运行 Python,但你可以使用 `%%stata` 魔法在该服务器上运行 Stata(v18)代码,例如:
%%stata
display "hello world"
运行可用工具解决练习,执行代码并解释结果。
**练习:**
在这个练习中,你将使用美国社区调查(ACS)的数据。ACS 是美国人口普查局的产品,每年都会采访数百万美国人。有关 ACS 的介绍,请访问 ACS 网站(此处)。
为此练习,我已经创建了一个数据文件,其中包含从 2010 ACS 的受访者收集的两个变量,这些受访者居住在两个大都市区之一:明尼阿波利斯/圣保罗和杜鲁门/苏佩里奥。这两个变量是:(1)人们的贫困状况和(2)人们上班所需的时间。
使用你已经拥有的 STATA 语法文件(来自第一次作业或课堂示例),并对其进行修改以完成以下目标。
1. 将此作业的数据文件 (`"./stata_assignment_2.dat"`) 读入 STATA。
2. 确保将 `TRANTIME`(通勤时间变量)的“零”值声明为缺失值。
3. 创建一个新的二分贫困变量,如果一个人的收入与贫困线比率 (`POVRATIO`) 小于 100,则等于“1”,否则等于“0”;请参见作业底部如何在 STATA 中做到这一点的示例。
4. 分别对明尼阿波利斯/圣保罗和杜鲁门/苏佩里奥:
- 生成通勤时间 (`TRANTIME`) 变量的直方图。
- 计算通勤时间的中心趋势和离散度。
- 生成贫困状态(0 vs 1)变量的频率分布。
5. 分别对明尼阿波利斯/圣保罗和杜鲁门/苏佩里奥,使用 STATA 代码生成:
- 通勤时间的 95% 置信区间。
- 贫困人口比例的 95% 置信区间。请参见下面如何在 STATA 中做到这一点的示例。
根据第 4 步的结果:
6. 分别对明尼阿波利斯/圣保罗和杜鲁门/苏佩里奥手动计算:
- 通勤时间的 95% 置信区间。
- 贫困人口比例的 95% 置信区间。
7. 确认步骤 5 和 6 的答案匹配。
根据上述结果回答以下问题:
8. 你如何解释步骤 5 和 6 中计算的置信区间?
9. 最后,创建一个包含所有 Stata 代码和答案作为注释的 .do 文件。
---
**"STATA ASSIGNMENT 2.DAT" 中变量的描述**
**METAREAD** (第 4-7 列)
大都市区
- `2240`: Duluth-Superior, MN/WI
- `5120`: Minneapolis-St. Paul, MN
**POVRATIO** (第 18-20 列)
个人收入与贫困线的比例:
- `<100`: 贫困线下
- `100`: 贫困线上
- `>100`: 贫困线上
**TRANTIME** (第 21-23 列)
上班所需时间
- `0`: 零分钟
- `1`: 1 分钟
- 等等。
你可以使用包含的外部客户端测试功能而不使用 Claude Desktop:
uv run python src/jupyter_ws_external_client.py
这将提供一个交互式菜单来测试一些可用的功能。
对于所有命令的自动化测试:
uv run python src/jupyter_ws_external_client.py --batch
此项目灵感来源于类似的 Jupyter MCP 集成,如: