ð Jupyter MCP Server
ããŒã«ã«ð Jupyter MCP Server ã«ã€ããŠ
Jupyter MCP Serverã¯ãMCP察å¿ã¢ããªã±ãŒã·ã§ã³ãAIãšãŒãžã§ã³ããJupyter Notebookã«æ¥ç¶ããã³ãŒãå®è¡ãšããŒãããã¯ç®¡çãå¯èœã«ããŸããPNGãJPEGãå«ãããã¹ãã»ç»ååºåãååŸããæäœéã§ç¶æ ãä¿æããŸãã
äž»ãªæ©èœ
- 01Pythonã³ãŒãã®ãªã¢ã«ã¿ã€ã å®è¡
- 02ã«ãŒãã«ãšã»ãã·ã§ã³ã®ç®¡ç
- 03ããŒãããã¯ã»ã«ã®äœæãšç·šé
- 04ããã¹ããšç»ååºåã®æœåº
- 05ããŒãããã¯ã®äœæãäžèŠ§è¡šç€ºãåãæ¿ã
掻çšã·ãŒã³
- 01ããŒãããã¯ã§åæã³ãŒããå®è¡
- 02ããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³ãçæããŠç»åãååŸ
- 03AIãšãŒãžã§ã³ãçµç±ã§ã»ã«ãæŽç
- 04å®è¡çµæãšãšã©ãŒã確èª
MCP 察å¿
MCPã¯ã©ã€ã¢ã³ãã«ããŒãããã¯ã®å®è¡ãã»ã«ããã¡ã€ã«ãåºåã®æäœãæäŸããŸããJupyter Server APIãšWebSocketãã£ãã«ãä»ããŠJupyterã«æ¥ç¶ããŸãã
èšå®
ããŒã«ã«ãµãŒããŒã®èšå®ã¯ã©ã®ã¯ã©ã€ã¢ã³ãã§ãå ±éã§ããã³ããŒããŠã¯ã©ã€ã¢ã³ãã® MCP èšå®ãã¡ã€ã«ã«è²Œãä»ããŠãã ããã
ãã®ãµãŒããŒã®ããã±ãŒãžããªã¢ãŒããšã³ããã€ã³ãã¯ãŸã ååŸã§ããŠããŸããããããžã§ã¯ãã® README ã®æé ã«åŸã£ãŠãã ããã
ããŒã«
ããŒã«ã«ãµãŒããŒã®ããŒã«ã¯ãã·ã³äžã§èµ·åããŠåããŠååŸã§ããŸããã¡ã³ãããŒã¯ãŸã ããŒã«äžèЧãæäŸããŠããŸããã
詳现
ð Jupyter MCP Server
AI ãšãŒãžã§ã³ããš Jupyter ããŒãããã¯ã飿ºããããªã¢ã«ã¿ã€ã ã®ã³ãŒãå®è¡ãå¯èŠåã®çæãé«åºŠãªç»åæœåºæ©èœãå®çŸãããå æ¬ç㪠Model Context ProtocolïŒMCPïŒãµãŒããŒã§ãã
ð¯ ãã®ãããžã§ã¯ãã«ã€ããŠ
ãã®ãããžã§ã¯ãã¯ãDatalayer, Inc. ãéçºãããªãªãžãã«ã® Jupyter MCP Server ããã©ãŒã¯ããæ©èœã匷åãããã®ã§ããJupyter ãš Model Context Protocol ãšã³ã·ã¹ãã ã®é£æºã«ãããåºç€ãšãªãåãçµã¿ãè¡ã£ã Datalayer ããŒã ã«ãå¿ããæè¬ããããŸãã
ãã®ãã©ãŒã¯ã§ã®äž»ãªåŒ·åç¹ïŒ
- ããã¥ã¡ã³ããšã»ããã¢ããããã»ã¹ã®æ¹å
- ãšã©ãŒåŠçãšå ç¢æ§ã®åŒ·å
- èšå®äŸã®è¿œå
- ã€ã³ã¹ããŒã«ãšèšå®ã®å¹çå
- äŸåé¢ä¿ãšäºææ§ã®æŽæ°
ð äž»ãªæ©èœ
ð¯ Jupyter ãšã®ãªã¢ã«ã¿ã€ã 飿º
- ã©ã€ãã³ãŒãå®è¡ïŒWebSocket æ¥ç¶ãéã㊠Python ã³ãŒãããªã¢ã«ã¿ã€ã ã«å®è¡
- ã«ãŒãã«ç®¡çïŒã«ãŒãã«ã®èªåäœæãã©ã€ããµã€ã¯ã«ç®¡çãã¯ãªãŒã³ã¢ãã
- ã»ãã·ã§ã³ã®æ°žç¶åïŒè€æ°ã®æäœã«ããã£ãŠç¶æ ãç¶æ
ðŒïž é«åºŠãªç»åæœåº
- è€æ°ã®åœ¢åŒããµããŒãïŒmatplotlibãseabornãplotly ãã PNG ããã³ JPEG ç»åãæœåº
- Base64 ãšã³ã³ãŒãïŒAI åŠçã§ããã«äœ¿ããç»åããŒã¿
- å æ¬çãªåºååŠçïŒããã¹ããç»åããšã©ãŒãå®è¡çµæã«å¯Ÿå¿
ð å æ¬çãªããŒãããã¯ç®¡ç
- ãã¡ã€ã«æäœïŒè€æ°ã®ããŒãããã¯ã®äœæãåé€ãåãæ¿ã
- ã»ã«æäœïŒCRUD æäœã«ããã»ã«ã®è¿œå ã倿Žãç§»åãåé€
- ã³ã³ãã³ã管çïŒMarkdown ã»ã«ãšã³ãŒãã»ã«ã®äž¡æ¹ããµããŒã
ð¡ïž ãšã³ã¿ãŒãã©ã€ãºå¯Ÿå¿ã®ã»ãã¥ãªãã£
- ã¹ããŒã㪠XSRF åŠçïŒããŒã¯ã³ãèªåæ€åºããŠç®¡ç
- èªèšŒãµããŒãïŒããŒã¯ã³èªèšŒã䜿çšãã Jupyter ãµãŒããŒãšäºæ
- ãšã©ãŒåŸ©æ§ïŒæ¥ç¶ã®åé¡ã«å¯Ÿããé©åãªãã©ãŒã«ããã¯
ðïž ã¢ãŒããã¯ãã£
graph TD
A[AI Agent/Claude] --> B[MCP Server]
B --> C[Jupyter Server API]
B --> D[WebSocket Channels]
C --> E[Kernel Management]
D --> F[Real-time Execution]
F --> G[Output Capture]
G --> H[Image Extraction]
G --> I[Text Processing]
B --> J[Notebook Files]
ð ïž 18 çš®é¡ã®å æ¬çãªããŒã«
ð ã»ã«ã³ã³ãã³ã管ç
add_execute_code_cell- Python ã³ãŒããå®è¡ãããªã¢ã«ã¿ã€ã ã§åºåadd_markdown_cell- æžåŒä»ãã®ããã¥ã¡ã³ãã远åmodify_cell- æ¢åã®ã»ã«ã³ã³ãã³ããç·šéchange_cell_type- Markdown ã»ã«ãšã³ãŒãã»ã«ãçžäºã«å€æ
ðŒïž åºåã®æœåº
get_cell_image_output- Base64 ãšã³ã³ãŒããããç»åïŒPNG/JPEGïŒãæœåºget_cell_text_output- ãšã©ãŒããã¬ãŒã¹ããã¯ãå«ããã¹ãŠã®ããã¹ãåºåãååŸ
ðïž ããŒãããã¯ã®ãã¡ã€ã«æäœ
create_notebook- æ°ããããŒãããã¯ãã¡ã€ã«ãäœædelete_notebook- ããŒãããã¯ãã¡ã€ã«ãå®å šã«åé€switch_notebook- ã¢ã¯ãã£ããªããŒãããã¯ãåãæ¿ãlist_notebooks- å©çšå¯èœãªããŒãããã¯ãäžèŠ§è¡šç€º
ð ããŒã¿ã®ç¢ºèª
list_cells- ãã¬ãã¥ãŒä»ãã§å šã»ã«ã®æŠèŠã衚瀺read_cell- ç¹å®ã®ã»ã«ã®å šã³ã³ãã³ããèªã¿åãget_notebook_info- ããŒãããã¯ã®å æ¬çãªã¡ã¿ããŒã¿ãååŸ
ããŒã«ã®å šããã¥ã¡ã³ããèŠã â
ð ã¯ã€ãã¯ã¹ã¿ãŒã
åææ¡ä»¶
- Python 3.11+
- Jupyter Notebook
- Claude Desktop ãŸãã¯äºææ§ã®ãã MCP ã¯ã©ã€ã¢ã³ã
ã€ã³ã¹ããŒã«
-
ãªããžããªãã¯ããŒã³
git clone https://github.com/JosephLin11/jupyter-mcp-server.git cd jupyter-mcp-server -
äŸåé¢ä¿ãã€ã³ã¹ããŒã«
pip install -r requirements.txt -
Jupyter Server ãèµ·å
./scripts/start_jupyter.sh -
Claude Desktop ãèšå®
claude_desktop_config.jsonã«è¿œå ããŸãïŒ{ "mcpServers": { "jupyter": { "command": "python", "args": ["/path/to/your/jupyter-mcp-server/src/jupyter_mcp_server.py"] } } }ð¡ ãã³ãïŒ
python3 scripts/get_claude_config.pyãå®è¡ãããšãçŸåšã®ãã¹ã«åºã¥ããæ£ããèšå®ãçæã§ããŸãïŒ
ð¡ ãŠãŒã¹ã±ãŒã¹ã®äŸ
ð ããŒã¿å¯èŠåãã€ãã©ã€ã³
# 1. Create and execute visualization code
add_execute_code_cell(cell_content="""
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
# Generate sample data
data = np.random.normal(0, 1, 1000)
# Create beautiful visualization
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.hist(data, bins=50, alpha=0.7, color='skyblue')
plt.title('Distribution Analysis')
plt.subplot(2, 2, 2)
sns.boxplot(y=data)
plt.title('Box Plot Analysis')
plt.tight_layout()
plt.show()
""")
# 2. Extract the generated image
get_cell_image_output(cell_index=0)
𧪠ç§åŠèšç®
# 3D surface visualization
add_execute_code_cell(cell_content="""
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(12, 9))
ax = fig.add_subplot(111, projection='3d')
# Create mesh
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
# Render surface
surface = ax.plot_surface(X, Y, Z, cmap='plasma', alpha=0.9)
ax.set_title('3D Mathematical Function')
plt.colorbar(surface)
plt.show()
""")
# Extract 3D visualization
get_cell_image_output(cell_index=1)
ð æè¡çãªç¹é·
é«åºŠãª WebSocket å®è£
- Jupyter ã«ãŒãã«ãšã®ãªã¢ã«ã¿ã€ã åæ¹åéä¿¡
- å æ¬çãªã¡ãã»ãŒãžã¿ã€ãåŠçïŒexecute_resultãdisplay_dataãstreamãerrorïŒ
- èªå忥ç¶ãšãã©ãŒã«ããã¯æ©æ§
ã¹ããŒããªåºååŠç
- Base64 ãšã³ã³ãŒãã«ããè€æ°åœ¢åŒã®ç»åæœåºïŒPNGãJPEGïŒ
- ã¡ã¿ããŒã¿ãä¿æããæ§é ååºåã®ååŸ
- å®å šãªãã¬ãŒã¹ããã¯ããµããŒããããšã©ãŒåŠç
å ç¢ãªã»ãã¥ãªãã£ã¢ãã«
- XSRF ããŒã¯ã³ã®èªåæ€åºãšç®¡ç
- è€æ°ã®èªèšŒãšã³ããã€ã³ãããµããŒã
- ããŸããŸãª Jupyter æ§æã«å¯Ÿå¿ããé©åãªçž®éåäœ
ãšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®ãšã©ãŒåŠç
- èšå®å¯èœãªãã°ã¬ãã«ã«ããå æ¬çãªãã®ã³ã°
- ä¿¡é Œæ§ãé«ãããã©ãŒã«ããã¯å®è¡ã¢ãŒã
- ãªãœãŒã¹ã®ã¯ãªãŒã³ã¢ãããšæ¥ç¶ç®¡ç
ð ä»£æ¿ææ®µãšã®æ¯èŒ
| æ©èœ | ãã®å®è£ | jjsantos01 MCP | Cursor MCP |
|---|---|---|---|
| å©çšå¯èœãªããŒã« | ð 18 åã®ããŒã« | 10 åã®ããŒã« | 8ïœ10 åã®ããŒã« |
| ç»åæœåº | ð PNG + JPEG | PNG ã®ã¿ | ãªã |
| ã»ããã¢ããã®è€éã | ð èªå | ãã©ãŠã¶ãŒã®æååæå | CLI åŒæ° |
| ããŒãžã§ã³ãµããŒã | ð ãã¹ãŠã® Jupyter ããŒãžã§ã³ | Jupyter 6.x ã®ã¿ | ããŒãžã§ã³ã«äŸåããªã |
| ãªã¢ã«ã¿ã€ã å®è¡ | ð WebSocket + HTTP | WebSocket ããªããž | ãã¡ã€ã«ã®ã¿ |
| ã»ãã¥ãªãã£åŠç | ð XSRF èªååŠç | åºæ¬ | 匷å |
𧪠ãã¹ã
å æ¬çãªãã¹ãã¹ã€ãŒããå®è¡ããŸãïŒ
# Test image extraction capabilities
python tests/test_image_extraction.py
# Test notebook operations
python tests/test_notebook_save.py
ð ãããžã§ã¯ãæ§æ
jupyter-mcp-server/
âââ src/
â âââ jupyter_mcp_server.py # Main MCP server implementation
âââ notebooks/ # ð All Jupyter notebooks are created here
â âââ mcp_notebook.ipynb # Default notebook for MCP operations
âââ tests/
â âââ test_image_extraction.py # Image extraction tests
â âââ test_notebook_save.py # Notebook operation tests
âââ scripts/
â âââ start_jupyter.sh # Jupyter server startup script
â âââ get_claude_config.py # Claude configuration generator
âââ examples/
â âââ claude_desktop_config.json # Example configuration
â âââ mcp_notebook.ipynb # Example notebook
â âââ new_notebook.ipynb # Sample notebook
âââ docs/
â âââ MCP_TOOLS_SUMMARY.md # Complete tool reference
â âââ SETUP.md # Setup guide
â âââ IMAGE_EXTRACTION_README.md # Image extraction guide
âââ requirements.txt # Python dependencies
âââ pyproject.toml # Project configuration
âââ README.md # Project documentation
ð€ è²¢ç®
è²¢ç®ãæè¿ããŸãïŒä»¥äžã®æé ã«åŸã£ãŠãã ããïŒ
- ãªããžããªããã©ãŒã¯ããŸã
- ãã£ãŒãã£ãŒãã©ã³ããäœæããŸãïŒ
git checkout -b feature/amazing-featureïŒ - 倿Žãã³ãããããŸãïŒ
git commit -m 'Add amazing feature'ïŒ - ãã©ã³ãã«ããã·ã¥ããŸãïŒ
git push origin feature/amazing-featureïŒ - ãã«ãªã¯ãšã¹ããäœæããŸã
ð ã©ã€ã»ã³ã¹
ãã®ãããžã§ã¯ã㯠BSD 3-Clause License ã®äžã§ã©ã€ã»ã³ã¹ãããŠããŸãã詳现ã«ã€ããŠã¯ãLICENSE ãã¡ã€ã«ãåç §ããŠãã ããã
ð è¬èŸ
- ãªãªãžãã«ã®éçºïŒåºç€ãšãªã Jupyter MCP Server ãäœæãã Datalayer, Inc. ã«æè¬ããŸã
- Model Context Protocol ãšã³ã·ã¹ãã ããçæ³ãåŸãŠããŸã
- å ç¢ãª Jupyter Server API ãåºç€ãšããŠããŸã
- ããŸããŸãª MCP å®è£ ã®ã¢ã€ãã¢ãåãå ¥ããŠåŒ·åãããŠããŸã
- ãªãŒãã³ãœãŒã¹ã³ãã¥ããã£ã«ç¹å¥ãªæè¬ãç³ãäžããŸã
ð§ ãåãåãã
Joseph Lin - GitHub
ãããžã§ã¯ããªã³ã¯ïŒhttps://github.com/JosephLin11/jupyter-mcp-server
ãªãªãžãã«ãããžã§ã¯ãïŒhttps://github.com/datalayer/jupyter-mcp-server
â 圹ã«ç«ã£ãå Žåã¯ããã®ãªããžããªã«ã¹ã¿ãŒãä»ããŠãã ããïŒâ
AI ãšããŒã¿ãµã€ãšã³ã¹ã®ã³ãã¥ããã£ã®ããã« â€ïž ã蟌ããŠéçº
Datalayer ãéçºããJoseph Lin ãæ©èœåŒ·åãšã¡ã³ããã³ã¹ãæ åœ
ã³ã¡ã³ã
MCP ã¯åããŠã§ããïŒ
ãããã³ã«ã®æŠèŠããæåã®ãµãŒããŒã®å°å ¥ãŸã§ãããããçåã«ãŸãšããŠçããŸãã
AI ã¢ããªã±ãŒã·ã§ã³ãå€éšã®ããŒã«ãããŒã¿ãœãŒã¹ã«çµ±äžçãªæ¹æ³ã§æ¥ç¶ããããã®ãªãŒãã³ãªãããã³ã«ã§ããã¯ã©ã€ã¢ã³ãã¯ã¢ãã«ãšã®å¯Ÿè©±ãæ ããMCP ãµãŒããŒã¯ããŒã«ã»ãªãœãŒã¹ã»ããã³ãããã³ãã¬ãŒããæäŸããŸããæšæºã¡ãã»ãŒãžã§ããåãããããã1 ã€ã®ãµãŒããŒãè€æ°ã®ã¯ã©ã€ã¢ã³ãã§åå©çšã§ããŸãã