CLI tool
jupyterlab/jupyter-ai avatar
jupyterlab/jupyter-ai

Jupyter AI: Agentic Notebooks via ACP and MCP, with Permission Guardrails

An open source extension that connects AI agents to computational notebooks in JupyterLab.

4,401 stars529 forksPythonBSD-3-Clause

At a glance

What is it?
Jupyter AI is an open source JupyterLab extension that connects AI agents to notebooks through the Agent Client Protocol and a built-in Jupyter MCP server. It targets data scientists and researchers who want agent assistance without leaving JupyterLab, but its incubation status and dependency on external agents require careful evaluation.
Who is it for?
Adopt Jupyter AI if you work in JupyterLab daily and want a single chat interface to agents like Claude, Codex, or Gemini, with file and notebook access controlled by a permission system. Do not adopt it if you need a standalone AI tool, prefer a hosted chat, or cannot tolerate the overhead of managing external agent dependencies and an MCP server.
Can I use it commercially?
Yes. BSD-3-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 5 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 14, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What Jupyter AI Solves for Notebook Users

Jupyter AI addresses a specific gap: notebooks are interactive, but AI assistance usually happens in a separate browser tab or terminal. The extension brings a native chat UI into JupyterLab, letting you collaborate with agents without switching tools. The documentation describes it as connecting AI agents to computational notebooks, and the README lists supported agents including Claude, Codex, GitHub Copilot, Gemini, Goose, Kiro, Mistral Vibe, and OpenCode. The target user is a data scientist or researcher who already lives in JupyterLab and wants agent help with file editing, command execution, or notebook manipulation. It is not for someone who wants a standalone AI chatbot; it is an extension that assumes JupyterLab as the host environment.

How It Works: ACP, MCP, and the Permission System

The architecture rests on two open protocols. The Agent Client Protocol (ACP) connects Jupyter AI to external agents, and the Model Context Protocol (MCP) lets agents access tools, resources, and prompts. The README states that agents are automatically detected when their dependencies are installed, so the extension does not hard-code each agent. A built-in Jupyter MCP server, hosted in the separate repository jupyter-server-mcp, gives agents the ability to read and write files, run terminal commands, and interact with notebooks. A permission system acts as a guardrail: agents request approval before writing files or executing commands. This is a meaningful design choice; it trades friction for safety. Every write or command may require a manual approval, which slows down agent workflows but reduces the chance of accidental destructive actions. The README also mentions multiple concurrent chats, drag-and-drop of files or cells as context, and real-time collaboration with other users on the same server, suggesting a multi-user server model rather than a purely local one.

Getting It Running: Installation and Agent Setup

The README points to a Getting Started page for installation, agent setup, and first chat, but it does not include explicit commands. Based on the repository layout, this is a standard JupyterLab extension, so installation likely follows the usual pattern: install the Python package via pip or conda, then enable the extension in JupyterLab. The README says that getting started is as simple as installing Jupyter AI and the agent of your choice, implying that you install the extension and separately install the agent's dependencies. There is no single command that installs both. The configuration involves setting up an agent, which likely requires API keys or authentication for services like Claude or Gemini, though the README does not specify those details. The actual setup steps are on the readthedocs site, which is the authoritative source. Without access to that page, I cannot confirm the exact pip command or environment variable names, so treat this section as a pointer, not a recipe.

A Genuine Limitation: External Agent Dependencies and Approval Friction

The most obvious limitation is that Jupyter AI is not self-contained. It depends on external agents that may require paid subscriptions, API keys, or separate installation steps. The README lists multiple agents, but it does not guarantee that all of them work equally well or that they are free. The permission system, while a safety feature, can become a bottleneck in interactive workflows. If you frequently ask an agent to write files or run commands, each action may trigger an approval prompt, which interrupts the flow. The README says agents request approval before writing files or executing commands, but it does not specify whether this is per-action or per-session. If it is per-action, the overhead could be high for batch operations. Another limitation is that Jupyter AI is under incubation as part of the JupyterLab organization, which means it is not a stable, fully supported project yet. The recent release history shows alpha and release candidate versions (v3.2.0a0, v3.2.0a1, v3.2.0rc0), indicating active but possibly unstable development.

Extensibility: Custom MCP Servers and Personas

Jupyter AI is designed for extension. The README explains that you can add custom MCP servers to give agents access to domain-specific tools, resources, and prompts. This is useful for teams that have internal APIs or data sources. The entry points API allows developers to build and register their own AI personas, which is a way to customize agent behavior. The use of open standards like ACP and MCP means you are not locked into a single vendor, but it also means you must rely on the quality and maintenance of those protocols' implementations. The README claims this avoids vendor lock-in, and that is a fair statement, but it does not eliminate the need to manage multiple dependencies. For a developer, the entry points API is a concrete mechanism, but the README does not provide code examples, so you would need to consult the developer guide for specifics. This extensibility is a strength for organizations with custom tooling, but it adds complexity for casual users.

Alternatives: JupyterLab Chat Extensions vs. Standalone Agents

The main alternative is to use a standalone AI agent like Claude or Codex in its own interface, outside JupyterLab. That approach avoids the permission system and the MCP server, but you lose the direct integration with notebooks. Another alternative is to use a different JupyterLab extension that provides chat or AI assistance, but the README does not mention any by name. The key difference is that Jupyter AI relies on ACP, which is a protocol for agent-client communication, whereas many other tools use direct API calls or vendor-specific SDKs. ACP is an open standard, but it is not universally adopted, so some agents may not be compatible. If you already use a specific agent that does not speak ACP, Jupyter AI will not work with it. The README lists several agents, but it does not claim exhaustive coverage. For a user who only needs a simple Q&A chatbot, a lightweight extension might be easier. For a user who wants full agent control over files and commands, Jupyter AI's permission system is a differentiator, but it also introduces a layer that standalone agents do not have.

Maintenance and License Considerations

The repository is under the BSD-3-Clause license, which is permissive and allows commercial use with attribution, but I am not giving legal advice. The project is not archived, and the last push was on 2026-08-28, with a release candidate v3.2.0rc0 on the same day. This indicates active development, but the alpha and rc tags suggest that stable releases may be less frequent. The README states that Jupyter AI is under incubation as part of the JupyterLab organization, which is a governance status that implies a period of evaluation before full acceptance. For maintenance, you should expect to update the extension regularly as agents and protocols evolve, and you may need to track changes in the jupyter-server-mcp repository. The dependency on external agents means that if an agent changes its API or authentication, Jupyter AI may break until a fix is released. The entry points API and custom MCP servers are additional components that you must maintain if you use them. Overall, the project is actively maintained, but its incubation status means you should not assume long-term stability.

Editorial conclusion

Adopt Jupyter AI if you work in JupyterLab daily and want a single chat interface to agents like Claude, Codex, or Gemini, with file and notebook access controlled by a permission system. Do not adopt it if you need a standalone AI tool, prefer a hosted chat, or cannot tolerate the overhead of managing external agent dependencies and an MCP server. Before committing, verify that your preferred agent is compatible with ACP, check the current state of the Jupyter MCP server (jupyter-server-mcp), and review the permission approval flow to ensure it matches your security requirements. Also confirm that the extension's incubation status under JupyterLab does not conflict with your organization's support policies.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community notes

Community notes