jupyter-mcp-server

作者 datalayer已验证

🪐 🔧 Model Context Protocol (MCP) Server for Jupyter.

1,254
Stars
191
Forks
Python
语言
2026/8/23
添加时间

⚠️ 第三方软件声明

本 Skill 为第三方开源软件,独立托管于 GitHub。SkillTip 仅为信息目录,不控制或维护底层仓库。所显示的安全检查为自动化且范围有限,安装前请自行审查源码。

阅读服务条款

安装

添加到你的 Claude Code skills 目录:

# Add to your Claude Code skills
git clone https://github.com/datalayer/jupyter-mcp-server

快速入门

使用 jupyter-mcp-server 等 Skills 的指南。

安全报告

已验证

上次扫描:—

{
  "status": "PASSED",
  "issues": []
}

README.md

Datalayer

Become a Sponsor

🪐🔧 Jupyter MCP Server

An MCP server developed for AI to connect and manage Jupyter Notebooks in real-time — and scale your Code Sandbox from local to the cloud (Datalayer, Kaggle, Google Colab, Modal, Daytona, E2B, CoreWeave, Cloudflare...)

Developed by Datalayer - Join our Discord

PyPI - Version Total PyPI downloads Docker Pulls License

Built and maintained by Datalayer

📖 Documentation  ·  🔧 Tools  ·  💬 Community

HOT NEWS

No process to run. Datalayer now hosts this server for you at https://mcp.datalayer.run/mcp — one endpoint for every agent and every notebook. Sign in from your browser, approve what the agent may do, and your work keeps running on the server after the agent disconnects.

Hosted Jupyter MCP Server

Claude Code plugin

One command to connect Claude Code, with /datalayer:notebook, /datalayer:run and /datalayer:status on top:

/plugin marketplace add datalayer/jupyter-mcp-server
/plugin install datalayer

Datalayer plugin for Claude Code


Free and open source, BSD 3-Clause — point it at any Jupyter you already run, local or JupyterHub, no account needed.

Built and maintained by Datalayer, where the same server drives always-on Notebooks with GPU Code Sandboxes and durable execution — so your agent keeps working on your data when your laptop does not.

Discover Datalayer


New: OAuth 2.1

No token to copy and paste. An agent that meets this server unauthenticated is told where to authenticate, opens your browser, and you sign in to Datalayer as yourself. The agent never sees your password — it receives a token scoped to what you approved, and you can disconnect one agent without touching the others.

What each agent may do is two separate decisions: the scopes you approve (notebooks:read, notebooks:write, code:execute, data:read) say what kind of operation it may perform, and your own Datalayer permissions still say which notebooks it may touch. An agent can never reach a notebook you cannot.

Personal access tokens keep working, and remain the simpler path for a CLI or a script. → OAuth and identity

Hot fix

Pin code-sandboxes to match your jupyter-mcp-server. The sandbox variant jupyter was renamed to jupyter-server in code-sandboxes 1.1.1, and the two packages have to agree on the name.

Your jupyter-mcp-serverInstall
>= 1.5.0code-sandboxes >= 1.1.1
< 1.5.0code-sandboxes <= 1.0.9
# On 1.5.0 or later
pip install "jupyter-mcp-server>=1.5.0" "code-sandboxes>=1.1.1"

# Staying on an earlier jupyter-mcp-server
pip install "jupyter-mcp-server<1.5.0" "code-sandboxes<=1.0.9"

An older server with a newer code-sandboxes installs cleanly and then fails on the first execution with Unknown sandbox variant: jupyter. → Release notes


Renamed in v1.3.2

--provider is now --document-provider (env var PROVIDERDOCUMENT_PROVIDER).

It only ever chose where the notebook documents live — jupyter for the collaboration API of a Jupyter Server, datalayer for the Datalayer spacer — while the old name and its help text suggested it also chose where code runs. Execution is picked separately, with --sandbox-variant (jupyter-server, datalayer, daytona, e2b, coreweave, cloudflare, kaggle, google-colab, monty, modal).

Nothing breaks in v1.3.2: --provider is still accepted as an alias, PROVIDER is still read, and a /connect payload carrying "provider" is still understood. Move to the new names when convenient — the old ones are deprecated, not removed.


Jupyter MCP Server Demo

📖 Table of Contents

🚀 Key Features

  • Real-time control: Instantly view notebook changes as they happen.
  • 🔁 Smart execution: Automatically adjusts when a cell run fails thanks to cell output feedback.
  • 🧠 Context-aware: Understands the entire notebook context for more relevant interactions.
  • 📊 Multimodal support: Support different output types, including images, plots, and text.
  • 📚 Multi-notebook support: Seamlessly switch between multiple notebooks.
  • 🎨 JupyterLab integration: Enhanced UI integration like automatic notebook opening.
  • 🤝 MCP-compatible: Works with any MCP client, such as Claude Desktop, Cursor, Windsurf, and more.
  • 🔍 Observability: Built-in hook system with OpenTelemetry integration for tracing tool calls and kernel executions.

Compatible with any Jupyter deployment (local, JupyterHub, ...) and with Datalayer hosted Notebooks, where the Code Sandboxes come with GPUs and the execution survives a disconnect.

🔧 MCP Overview

🔧 Tools Overview

The server provides a rich set of tools for interacting with Jupyter notebooks, categorized as follows. For more details on each tool, their parameters, and return values, please refer to the official Tools documentation.

Server and Code Sandbox Management Tools

NameDescription
list_filesList files and directories in the Jupyter server's file system.
list_kernelsList all available and running kernel sessions on the Jupyter server.
launch_sandboxLaunch a code sandbox (eval/docker/jupyter-server/datalayer/daytona/e2b/coreweave/cloudflare/kaggle/google-colab/monty/modal) as an alternative execution backend for execute_code. Supports variant-specific options including GPU flavor for supported backends. Requires the jupyter_mcp_sandboxes extension.
list_sandboxesList launched code sandboxes and their state (active flag, variant, status, and selected code sandbox options). Requires the jupyter_mcp_sandboxes extension.
use_sandboxSelect or clear the active sandbox used by execute_code, enabling dynamic routing between kernel-backed and sandbox-backed execution. Requires the jupyter_mcp_sandboxes extension.
terminate_sandboxStop and unregister a launched code sandbox. Requires the jupyter_mcp_sandboxes extension.
connect_to_jupyterConnect to a Jupyter server dynamically without restarting the MCP server. Not available when running as Jupyter extension. Useful for switching servers dynamically or avoiding hardcoded configuration.

Multi-Notebook Management Tools

NameDescription
use_notebookConnect to a notebook file, create a new one, or switch between notebooks.
list_notebooksList all notebooks available on the Jupyter server and their status
restart_notebookRestart the kernel for a specific managed notebook.
unuse_notebookDisconnect from a specific notebook and release its resources.
read_notebookRead notebook cells source content with brief or detailed format options.

Cell Operations and Execution Tools

NameDescription
read_cellRead the full content (Metadata, Source and Outputs) of a single cell.
insert_cellInsert a new code or markdown cell at a specified position.
delete_cellDelete a cell at a specified index.
move_cellMove a cell from one position to another within a notebook.
clear_cell_outputClear the outputs and execution count of a single code cell.
overwrite_cell_sourceOverwrite the source code of an existing cell.
edit_cell_sourceApply surgical find-and-replace edits to a cell's source without full rewrite.
execute_cellExecute a cell with timeout, supports multimodal output including images.
insert_execute_code_cellInsert a new code cell and execute it in one step.
execute_codeExecute code directly in the active backend (kernel by default, or active sandbox if selected), supports magic commands and shell commands. When the selected sandbox supports streaming execution, progress/output events are consumed and returned in order.

JupyterLab Integration

Available only when JupyterLab mode is enabled. It is enabled by default.

When running in JupyterLab mode, Jupyter MCP Server integrates with jupyter-mcp-tools to expose additional JupyterLab commands as MCP tools. By default, the following tools are enabled:

NameDescription
notebook_run-all-cellsExecute all cells in the current notebook sequentially
notebook_get-selected-cellGet information about the currently selected cell
📚 Learn how to customize additional tools

You can now customize which tools from jupyter-mcp-tools are available using the allowed_jupyter_mcp_tools configuration parameter. This allows you to enable additional notebook operations, console commands, file management tools, and more.

# Example: Enable additional tools via command-line
jupyter lab --port 4040 --IdentityProvider.token MY_TOKEN --JupyterMCPServerExtensionApp.allowed_jupyter_mcp_tools="notebook_run-all-cells,notebook_get-selected-cell,notebook_append-execute,console_create"

For the complete list of available tools and detailed configuration instructions, please refer to the Additional Tools documentation.

📝 Prompt Overview

The server also supports prompt feature of MCP, providing a easy way for user to interact with Jupyter notebooks.

NameDescription
jupyter-citeCite specific cells from specified notebook (like @ in Coding IDE or CLI)

For more details on each prompt, their input parameters, and return content, please refer to the official Prompt documentation.

🏁 Getting Started

For comprehensive setup instructions—including Streamable HTTP transport, running as a Jupyter Server extension and advanced configuration—check out our documentation. Or, get started quickly with JupyterLab and STDIO transport here below.

1. Set Up Your Environment

pip install jupyterlab jupyter-collaboration jupyter-mcp-tools ipykernel

Tip

To confirm your environment is correctly configured:

  1. Open a notebook in JupyterLab
  2. Type some content in any cell (code or markdown)
  3. Observe the tab indicator: you should see an "×" appear next to the notebook name, indicating unsaved changes
  4. Wait a few seconds—the "×" should automatically change to a "●" without manually saving

This automatic saving behavior confirms that the real-time collaboration features are working properly, which is essential for MCP server integration.


2. Start JupyterLab

# Start JupyterLab on port 8888, allowing access from any IP and setting a token
jupyter lab --port 8888 --IdentityProvider.token MY_TOKEN --ip 0.0.0.0

Note

If you are running notebooks through JupyterHub instead of JupyterLab as above, refer to our JupyterHub setup guide.


3. Configure Your Preferred MCP Client

Next, configure your MCP client to connect to the server. We offer two primary methods—choose the one that best fits your needs:

  • 📦 Using uvx (Recommended for Quick Start): A lightweight and fast method using uv. Ideal for local development and first-time users.
  • 🐳 Using Docker (Recommended for Production): A containerized approach that ensures a consistent and isolated environment, perfect for production or complex setups.
📦 Using uvx (Quick Start)

First, install uv:

pip install uv
uv --version
# should be 0.6.14 or higher

See more details on uv installation.

Then, configure your client:

{
  "mcpServers": {
    "jupyter": {
      "command": "uvx",
      "args": ["jupyter-mcp-server@latest"],
      "env": {
        "JUPYTER_URL": "http://localhost:8888",
        "JUPYTER_TOKEN": "MY_TOKEN",
        "ALLOW_IMG_OUTPUT": "true"
      }
    }
  }
}
🐳 Using Docker (Production)

On macOS and Windows:

{
  "mcpServers": {
    "jupyter": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "JUPYTER_URL",
        "-e", "JUPYTER_TOKEN",
        "-e", "ALLOW_IMG_OUTPUT",
        "datalayer/jupyter-mcp-server:latest"
      ],
      "env": {
        "JUPYTER_URL": "http://host.docker.internal:8888",
        "JUPYTER_TOKEN": "MY_TOKEN",
        "ALLOW_IMG_OUTPUT": "true"
      }
    }
  }
}

On Linux:

{
  "mcpServers": {
    "jupyter": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "JUPYTER_URL",
        "-e", "JUPYTER_TOKEN",
        "-e", "ALLOW_IMG_OUTPUT",
        "--network=host",
        "datalayer/jupyter-mcp-server:latest"
      ],
      "env": {
        "JUPYTER_URL": "http://localhost:8888",
        "JUPYTER_TOKEN": "MY_TOKEN",
        "ALLOW_IMG_OUTPUT": "true"
      }
    }
  }
}

Tip

  1. Port Configuration: Ensure the port in your Jupyter URLs matches the one used in the jupyter lab command. For simplified config, set this in JUPYTER_URL.
  2. Server Separation: Use JUPYTER_URL when both services are on the same server, or set individual variables for advanced deployments. The different URL variables exist because some deployments separate notebook storage (DOCUMENT_URL) from kernel execution (CODE_SANDBOX_URL).
  3. Authentication: In most cases, document and code sandbox services use the same authentication token. Use JUPYTER_TOKEN for simplified config or set DOCUMENT_TOKEN and CODE_SANDBOX_TOKEN individually for different credentials.
  4. Notebook Path: The DOCUMENT_ID parameter specifies the path to the notebook the MCP client default to connect. It should be relative to the directory where JupyterLab was started. If you omit DOCUMENT_ID, the MCP client can automatically list all available notebooks on the Jupyter server, allowing you to select one interactively via your prompts.
  5. Image Output: Set ALLOW_IMG_OUTPUT to false if your LLM does not support mutimodel understanding.

For detailed instructions on configuring various MCP clients—including Claude Desktop, VS Code, Cursor, Cline, and Windsurf — see the Clients documentation.

🧩 Sandbox Variants

By default, code executes through the code-sandboxes jupyter-server variant against a Jupyter Server (SANDBOX_VARIANT=jupyter-server). Setting SANDBOX_VARIANT to any other value uses another code-sandboxes engine via the sandbox's plain kernel client when the selected variant exposes one, so the same notebook tools can run code on additional backends.

The spelling is not fussy: google_colab, google-colab and GOOGLE-COLAB all name the same variant. The names below are the canonical ones.

Sandbox features are provided by the optional jupyter_mcp_sandboxes extension. To expose sandbox lifecycle tools (launch_sandbox, list_sandboxes, use_sandbox, terminate_sandbox) or run any non-jupyter-server sandbox variant, install it with pip install jupyter_mcp_sandboxes.

EngineSANDBOX_VARIANTExtra installKey variables
Jupyter Server (default)jupyter-serverJUPYTER_URL, JUPYTER_TOKEN
JupyterHubjupyter-serverCODE_SANDBOX_URL, CODE_SANDBOX_TOKEN
Datalayerdatalayerjupyter-mcp-server[datalayer]CODE_SANDBOX_URL, CODE_SANDBOX_TOKEN, SANDBOX_ENVIRONMENT
Kagglekagglejupyter-mcp-server[kaggle]Default batch mode: Kaggle credentials (KAGGLE_API_TOKEN or kaggle.json). Interactive mode: CODE_SANDBOX_URL + (KAGGLE_API_TOKEN/CODE_SANDBOX_TOKEN or CODE_SANDBOX_ID). Optional accelerator: SANDBOX_GPU.
Google Colabgoogle-colabjupyter-mcp-serverCODE_SANDBOX_URL, CODE_SANDBOX_ID, CODE_SANDBOX_PROXY_TOKEN
Montymontyjupyter-mcp-server[monty]
Modalmodaljupyter-mcp-server[modal]Modal credentials
Daytonadaytonajupyter-mcp-server[daytona]DAYTONA_API_KEY, or DAYTONA_JWT_TOKEN + DAYTONA_ORGANIZATION_ID. Optional accelerator: SANDBOX_GPU.
E2Be2bjupyter-mcp-server[e2b]E2B_API_KEY. Optional: E2B_DOMAIN.
CoreWeavecoreweavejupyter-mcp-server[coreweave]CWSANDBOX_API_KEY. Optional: CWSANDBOX_BASE_URL, accelerator SANDBOX_GPU.
Cloudflarecloudflarejupyter-mcp-server[cloudflare]CLOUDFLARE_SANDBOX_API_URL, CLOUDFLARE_SANDBOX_API_KEY

1. Jupyter Server

The default engine. Point the server at a running Jupyter Server:

pip install jupyter-mcp-server
"env": {
  "JUPYTER_URL": "http://localhost:8888",
  "JUPYTER_TOKEN": "MY_TOKEN"
}

2. JupyterHub

JupyterHub uses the same jupyter-server engine, targeting a user's single-user server. Authenticate with a JupyterHub API token that has the access:servers scope:

"env": {
  "CODE_SANDBOX_URL": "https://your-jupyterhub.domain/user/<username>",
  "CODE_SANDBOX_TOKEN": "your-jupyterhub-api-token",
  "DOCUMENT_URL": "https://your-jupyterhub.domain/user/<username>",
  "DOCUMENT_TOKEN": "your-jupyterhub-api-token"
}

See the JupyterHub setup guide for full details.

3. Datalayer

Execute on the Datalayer cloud code sandbox with GPU support and persistence:

pip install "jupyter-mcp-server[datalayer]"
"env": {
  "SANDBOX_VARIANT": "datalayer",
  "CODE_SANDBOX_URL": "https://prod1.datalayer.run",
  "CODE_SANDBOX_TOKEN": "your-datalayer-token",
  "SANDBOX_ENVIRONMENT": "python-cpu-env"
}

4. Kaggle

Execute against Kaggle. By default, when no code sandbox URL/channels are provided, the server uses the transparent Kaggle batch path from code-sandboxes. If code sandbox values are provided, it uses Kaggle interactive kernel mode.

pip install "jupyter-mcp-server[kaggle]"
"env": {
  "SANDBOX_VARIANT": "kaggle",
  "KAGGLE_API_TOKEN": "...",
  "SANDBOX_GPU": "T4"
}

To force interactive code sandbox mode, provide CODE_SANDBOX_URL and either:

  • KAGGLE_API_TOKEN / CODE_SANDBOX_TOKEN (create kernel), or
  • CODE_SANDBOX_ID / CODE_SANDBOX_CHANNELS_URL (connect existing kernel).

Supported Kaggle accelerator values include: NvidiaTeslaP100, NvidiaTeslaT4, NvidiaTeslaT4Highmem, NvidiaL4, NvidiaL4X1, NvidiaTeslaA100, NvidiaH100, and NvidiaRtxPro6000. Aliases such as P100 and T4 are accepted.

Note: Kaggle free-tier availability usually includes P100 and T4. Other accelerators are commonly restricted to specific competitions or internal Kaggle workloads.

5. Google Colab

Execute against a Google Colab code sandbox. Install Jupyter MCP Server and provide the values from an active Colab notebook session:

pip install jupyter-mcp-server
"env": {
  "SANDBOX_VARIANT": "google-colab",
  "CODE_SANDBOX_URL": "https://8080-m-s-kkb-...-d.us-east1-0.prod.colab.dev",
  "CODE_SANDBOX_ID": "a1b2c3d4-....",
  "CODE_SANDBOX_PROXY_TOKEN": "ya29...."
}

The proxy token (colab-runtime-proxy-token) is short-lived; refresh it when it expires.

You can also pass CODE_SANDBOX_CHANNELS_URL with the Colab channels WebSocket URL and let the server derive CODE_SANDBOX_URL and CODE_SANDBOX_ID.

6. Monty

Execute in Monty, a secure in-process Python interpreter — ideal for short, safe LLM snippets. No credentials required.

pip install "jupyter-mcp-server[monty]"
"env": {
  "SANDBOX_VARIANT": "monty"
}

Monty supports only a subset of Python; third-party libraries and rich display outputs are not available.

7. Modal

Execute in a Modal cloud sandbox. Install the extra and configure Modal credentials:

pip install "jupyter-mcp-server[modal]"
modal token new

For local development, modal token new is usually enough because the Modal SDK loads credentials from ~/.modal.toml.

If you run in CI/CD, containers, or hosted runners, set both environment variables below.

"env": {
  "SANDBOX_VARIANT": "modal",
  "MODAL_TOKEN_ID": "ak-...",
  "MODAL_TOKEN_SECRET": "as-..."
}

Why both variables? Modal uses a token pair for environment-based auth:

  • MODAL_TOKEN_ID: public token identifier.
  • MODAL_TOKEN_SECRET: secret half paired with that id.

Providing only one is insufficient for authentication.

If needed, export both values from your local Modal config:

python - <<'PY'
import pathlib
import tomllib

cfg = tomllib.loads(pathlib.Path("~/.modal.toml").expanduser().read_text())
profile = cfg.get("default", cfg)
token_id = profile.get("token_id")
token_secret = profile.get("token_secret")
if token_id and token_secret:
    print(f"export MODAL_TOKEN_ID={token_id}")
    print(f"export MODAL_TOKEN_SECRET={token_secret}")
else:
    raise SystemExit("Could not find token_id/token_secret in ~/.modal.toml")
PY

8. Daytona

Execute in a Daytona cloud sandbox. Install the extra and provide a Daytona API key:

pip install "jupyter-mcp-server[daytona]"
"env": {
  "SANDBOX_VARIANT": "daytona",
  "DAYTONA_API_KEY": "your-daytona-api-key"
}

Instead of an API key you can authenticate with a JWT token, which Daytona reads together with the organization it belongs to:

"env": {
  "SANDBOX_VARIANT": "daytona",
  "DAYTONA_JWT_TOKEN": "your-daytona-jwt-token",
  "DAYTONA_ORGANIZATION_ID": "your-daytona-organization-id"
}

Ask for a GPU with SANDBOX_GPU (for example H100, H200, RTX-4090). Daytona also sells preemptible ("spot") GPU capacity, which is chosen through the code-sandboxes API rather than a SANDBOX_* variable.

Daytona's code interpreter holds a namespace, so variables set in one call are still there in the next. Rich display data (figures, HTML) is not returned.

9. E2B

Execute in an E2B sandbox. Install the extra and provide an E2B API key:

pip install "jupyter-mcp-server[e2b]"
"env": {
  "SANDBOX_VARIANT": "e2b",
  "E2B_API_KEY": "your-e2b-api-key"
}

Set E2B_DOMAIN to reach an E2B deployment other than the default e2b.dev.

The sandbox is created from E2B's code-interpreter-v1 template, which is the one carrying the Jupyter kernel the code interpreter talks to.

Each execution context is a Jupyter kernel, so state persists across calls, and rich outputs — figures, HTML — come back as results.

10. CoreWeave

Execute in a CoreWeave Sandbox, a container on CoreWeave's GPU cloud. Install the extra and provide a CoreWeave Sandboxes API key:

pip install "jupyter-mcp-server[coreweave]"
"env": {
  "SANDBOX_VARIANT": "coreweave",
  "CWSANDBOX_API_KEY": "your-coreweave-api-key",
  "SANDBOX_GPU": "H100"
}

SANDBOX_GPU is optional; without it the sandbox is a plain container. Set CWSANDBOX_BASE_URL to reach an endpoint other than the default https://api.cwsandbox.com.

State is kept by a session process the variant holds open on stdin. If that process cannot start, each snippet runs in a process of its own and variables do not carry over. Rich display data is not returned.

11. Cloudflare

Execute in a Cloudflare Sandbox. Cloudflare's own SDK is a TypeScript Workers binding, which a Python process cannot hold, so this variant drives the sandbox bridge — a reference Worker Cloudflare publishes that exposes the SDK over HTTP. Deploy it once:

npm create cloudflare -- sandbox-bridge \
  --template=cloudflare/sandbox-sdk/bridge/worker

The deployment returns the bridge's workers.dev URL and generates the key it accepts. Both are required:

pip install "jupyter-mcp-server[cloudflare]"
"env": {
  "SANDBOX_VARIANT": "cloudflare",
  "CLOUDFLARE_SANDBOX_API_URL": "https://sandbox-bridge.your-subdomain.workers.dev",
  "CLOUDFLARE_SANDBOX_API_KEY": "your-bridge-api-key"
}

See the sandbox bridge documentation for the Worker itself.

Each snippet runs in a process of its own, so x = 1 is gone by the next call. Combine statements into a single cell, or keep state in a file — the filesystem persists. Rich display data is not returned.

You can also select the engine on the command line with --sandbox-variant, --code-sandbox-proxy-token, and --sandbox-environment.

🧪 Testing

Run the test suite:

pytest tests/

Required environment variables for tests:

  • None for the default local suite.

Optional environment variables:

  • TEST_MCP_SERVER: true/false toggle for standalone MCP server mode tests (default true).
  • TEST_JUPYTER_SERVER: true/false toggle for Jupyter extension mode tests (default true).
  • DATALAYER_API_KEY: required only for Datalayer cloud smoke/integration tests.
  • DATALAYER_RUN_URL: optional custom Datalayer code sandbox URL for datalayer engine tests.
  • SANDBOX_ENVIRONMENT: optional cloud environment override (for example ai-agents-env).

✅ Best Practices

  • Interact with LLMs that supports multimodal input (like Gemini 2.5 Pro) to fully utilize advanced multimodal understanding capabilities.
  • Use a MCP client that supports returning image data and can parse it (like Cursor, Gemini CLI, etc.), as some clients may not support this feature.
  • Break down complex task (like the whole data science workflow) into multiple sub-tasks (like data cleaning, feature engineering, model training, model evaluation, etc.) and execute them step-by-step.
  • Provide clearly structured prompts and rules (👉 Visit our Prompt Templates to get started)
  • Provide as much context as possible (like already installed packages, field explanations for existing datasets, current working directory, detailed task requirements, etc.).

🤝 Contributing

We welcome contributions of all kinds! Here are some examples:

  • 🐛 Bug fixes
  • 📝 Improvements to existing features
  • 🔧 New feature development
  • 📚 Documentation improvements and prompt templates

For detailed instructions on how to get started with development and submit your contributions, please see our Contributing Guide.

Our Contributors

Contributors

📚 Resources

Looking for blog posts, videos, or other materials about Jupyter MCP Server?

👉 Visit the Resources section in our documentation for more!

Star History Chart


If this project is helpful to you, please give us a ⭐️

Made with ❤️ by Datalayer

Datalayer Logo

常见问题

What is jupyter-mcp-server?

jupyter-mcp-server is an open-source mcp servers skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by datalayer. 🪐 🔧 Model Context Protocol (MCP) Server for Jupyter. It has 1,254 GitHub stars.

Is jupyter-mcp-server safe to use?

Yes. jupyter-mcp-server passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.

How do I install jupyter-mcp-server?

Clone the repository with "git clone https://github.com/datalayer/jupyter-mcp-server" and add it to your Claude Code skills directory (see the Installation section above).

What programming language is jupyter-mcp-server written in?

jupyter-mcp-server is primarily written in Python. It is open-source under datalayer on GitHub, so you can review or fork the full source.

Are there alternatives to jupyter-mcp-server?

Yes. SkillsLLM lists many other MCP Servers skills you can browse and compare side by side. Open the MCP Servers category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh jupyter-mcp-server against similar tools.

评论 (0)

暂无评论,成为第一个分享想法的人!

n8n

by n8n-io

12

Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

201,88160,308TypeScript
MCP 服务器apisai-tools
查看详情

Scrapling

by D4Vinci

🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!

75,9137,581Python
MCP 服务器
查看详情

TrendRadar

by sansan0

⭐AI-driven public opinion & trend monitor with multi-platform aggregation, RSS, and smart alerts.🎯 告别信息过载,你的 AI 舆情监控助手与热点筛选工具!聚合多平台热点 + RSS 订阅,支持关键词精准筛选。AI 智能筛选新闻 + AI 翻译 + AI 分析简报直推手机,也支持接入 MCP 架构,赋能 AI 自然语言对话分析、情感洞察与趋势预测等。支持 Docker ,数据本地/云端自持。集成微信/飞书/钉钉/Telegram/邮件/ntfy/bark/slack 等渠道智能推送。

61,65224,883Python
MCP 服务器
查看详情

context7

by upstash

Context7 Platform -- Up-to-date code documentation for LLMs and AI code editors

61,0602,938TypeScript
MCP 服务器
查看详情

High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.

39,9393,219C
MCP 服务器
查看详情

开发者还喜欢

基于喜欢此 Skill 的开发者投票和收藏

ECC

by affaan-m

10

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

242,21936,702JavaScript
AI 智能体ai-agentsanthropicclaude-code
查看详情
15

An agentic skills framework & software development methodology that works.

234,96620,863Shell
AI 智能体ai-agentsbrainstorming
查看详情

hermes-agent

by NousResearch

10

The agent that grows with you

234,43747,175Python
AI 智能体ai-agentsagent-orchestration
查看详情

n8n

by n8n-io

12

Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

201,88160,308TypeScript
MCP 服务器apisai-tools
查看详情

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

185,94028,768JavaScript
AI 智能体ai-agentsanthropicclaude-code
查看详情

cc-switch

by farion1231

3

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

128,8688,826Rust
AI 智能体claude-codeai-tools
查看详情