JupyterMCP
Allows AI agents to create, read, edit, and execute Jupyter notebook cells, manage kernels, and connect to remote Jupyter servers.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@JupyterMCPCreate a notebook called analysis and run a cell that loads data.csv"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
JupyterMCP
An MCP server that gives AI agents full control over Jupyter notebooks — create, read, edit, and execute cells, manage kernels, and connect to remote Jupyter Servers.
Works with Claude Code, Claude Desktop, and any other MCP-compatible client.
Installation
pip install mcp-jupyter-serverOr with uv:
uv add mcp-jupyter-serverRelated MCP server: mcp-server-jupyter
Adding to Claude Code
Option 1 — CLI (recommended)
claude mcp add jupyter -- jupyter-mcpPin notebooks to a specific directory at startup:
claude mcp add jupyter -- jupyter-mcp --working-dir /path/to/your/notebooksOption 2 — Project config (.mcp.json)
{
"mcpServers": {
"jupyter": {
"command": "jupyter-mcp",
"args": ["--working-dir", "/path/to/your/notebooks"]
}
}
}Option 3 — Global config (~/.claude/settings.json)
{
"mcpServers": {
"jupyter": {
"command": "jupyter-mcp"
}
}
}After adding, verify the connection with /mcp in Claude Code.
Adding to Claude Desktop
Edit your config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"jupyter": {
"command": "jupyter-mcp",
"args": ["--working-dir", "/path/to/your/notebooks"]
}
}
}Restart Claude Desktop after saving.
What You Can Do
JupyterMCP exposes 19 tools across five categories:
Category | Tools |
Notebooks |
|
Cells |
|
Kernels |
|
Workspace |
|
Remote |
|
Notebooks are always saved as .ipynb files. Kernel state (variables, imports) persists between cell executions within the same session.
Example prompts
"Create a notebook called
analysis, add a cell that loadsdata.csvwith pandas, and execute it."
"Show me
model_training.ipynbas a single Python script so I can review the logic."
"Something's wrong in cell 3 of
pipeline.ipynb— read the notebook, fix it, and re-run."
"Connect to my remote GPU server at
http://10.0.0.5:8888and run the training notebook there."
Configuration
Working directory
Controls where notebooks are read from and written to. Defaults to the current working directory.
Method | Example |
CLI arg |
|
Environment variable |
|
At runtime |
|
Remote Jupyter Server
Route kernel execution to a remote Jupyter Server while keeping notebooks saved locally. Useful for cloud GPUs, remote data, or shared compute.
Method | Example |
CLI args |
|
Environment variables |
|
At runtime |
|
Find your Jupyter token in the server startup output:
http://localhost:8888/?token=abc123...Tool Reference
Notebooks
notebook_create
Create a new empty notebook. The .ipynb extension is added automatically.
name: strnotebook_get
Return the full notebook structure: all cells with their IDs, types, source, execution counts, and outputs. Use the returned cell IDs with cell_update, cell_delete, cell_move, and cell_execute.
name: strnotebook_list
List all .ipynb files in the current working directory.
notebook_delete
Delete a notebook file and shut down its kernel if running.
name: strnotebook_as_script
Return the entire notebook as a single Python string using # %% cell markers (compatible with VS Code, Spyder, and nbconvert). Useful for letting an agent read and reason about a notebook as a complete program.
Code cells are pasted verbatim; markdown cells have each line prefixed with # .
name: str
include_markdown: bool = TrueExample output:
# %% [cell 0 · code · id:abc123]
import pandas as pd
df = pd.read_csv("data.csv")
# %% [cell 1 · markdown · id:def456]
# ## Data Cleaning
# Drop rows with missing values.
# %% [cell 2 · code · id:ghi789]
df = df.dropna()
df.head()notebook_execute_all
Execute all code cells in order. Markdown and raw cells are skipped.
name: str
timeout: int = 30
stop_on_error: bool = True
python_path: str = ""Cells
cell_add
Add a new cell to a notebook.
name: str
source: str
cell_type: str = "code" — "code", "markdown", or "raw"
position: int = -1 — 0 = prepend, -1 = appendReturns the new cell's cell_id and position.
cell_update
Replace a cell's source. For code cells, clears existing outputs and execution count.
name: str
cell_id: str — from notebook_get
source: strcell_delete
Delete a cell by ID.
name: str
cell_id: strcell_move
Reorder a cell within the notebook.
name: str
cell_id: str
new_position: int — 0-indexedcell_execute
Execute a single code cell and return its outputs. Saves outputs back to the .ipynb file.
name: str
cell_id: str
timeout: int = 30
python_path: str = "" — only applies when starting a new kernelKernels
kernel_status
Get the current status (not_started, idle, or dead) and Python interpreter of a notebook's kernel.
name: strkernel_restart
Restart the kernel, clearing all in-memory state. Saved cell outputs are not affected.
name: str
python_path: str = "" — switch to a different interpreter on restartkernel_interrupt
Send an interrupt signal to stop a long-running or stuck cell.
name: strWorkspace
get_notebook_directory
Return the current working directory for notebook operations.
set_notebook_directory
Change the working directory. All subsequent notebook operations use the new path.
path: str — must already existRemote Execution
remote_connect
Connect to a remote Jupyter Server. All kernel operations are routed there; notebooks are still saved locally.
server_url: str — e.g. "http://hostname:8888"
token: strremote_disconnect
Disconnect from the remote server, shut down remote kernels, and revert to local execution.
remote_status
Show whether a remote server is connected and which URL it is using.
Architecture
src/jupyter_mcp/
├── server.py — FastMCP server, CLI arg parsing
├── notebook_manager.py — Read/write/serialize .ipynb files
├── kernel_manager.py — Local kernel lifecycle
├── remote_kernel_manager.py — Remote kernel lifecycle (REST + WebSocket)
├── executor.py — Cell execution and output collection
└── tools/
├── notebooks.py — notebook_* tools
├── cells.py — cell_* tools
├── execution.py — cell_execute, notebook_execute_all
├── kernel.py — kernel_* tools
└── remote.py — remote_* toolsUses stdio transport — runs as a subprocess of the MCP client. Notebooks are standard .ipynb files and can be opened in JupyterLab, VS Code, or any Jupyter-compatible editor at any time.
Contributing
git clone https://github.com/Try3D/JupyterMCP
cd JupyterMCP
uv syncLicense
MIT
Available Tools
21 toolscell_addA
Add a new cell to a notebook.
name: notebook name (with or without .ipynb)
source: the cell content / code
cell_type: 'code', 'markdown', or 'raw' (default: 'code')
position: index to insert at (0 = first cell, -1 = append at end) Returns the new cell's ID and position.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| source | Yes | ||
| cell_type | No | code | |
| position | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds moderate value beyond annotations by stating the return value (cell ID and position) and specifying defaults. However, it does not disclose error handling, required permissions, or behavior on invalid inputs, which are important for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, uses bullet-like formatting for clarity, and front-loads the purpose. Every sentence is essential, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (4 parameters, no output schema), the description covers purpose, parameters, and return value. It lacks information about prerequisites (e.g., notebook must exist) and error conditions, but overall it is fairly complete for an add operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates fully by explaining each parameter: name format, source content, cell_type options with default, and position semantics (0 = first, -1 = append). This adds significant meaning beyond the schema's type and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Add a new cell' and the target resource 'notebook', making the purpose unambiguous. It differentiates from sibling tools like cell_delete and cell_update by focusing on addition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for adding cells but provides no explicit guidance on when to use this tool versus alternatives, nor does it mention prerequisites or exclusion criteria. The context is implied by the tool's function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cell_deleteADestructiveIdempotent
Delete a cell from a notebook by its cell ID. Use notebook_get to find cell IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| cell_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description confirms the destructive nature implied by annotations ('delete'). However, it adds no extra behavioral context beyond what the annotations already provide (destructiveHint: true, idempotentHint: true). The description does not elaborate on side effects or irreversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences front-load the action and prerequisite. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (two params, no output schema) and presence of annotations, the description covers the core purpose and a key prerequisite. However, it omits explanation of the 'name' parameter, slightly reducing completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should explain parameter meaning. It only mentions that notebook_get provides cell IDs, but does not clarify the 'name' parameter or specify that 'cell_id' is a string ID. This leaves ambiguity about required inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete a cell'), the resource ('from a notebook'), and the method ('by its cell ID'). This verb-resource pairing distinguishes it from sibling tools like cell_add or cell_update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a helpful prerequisite: 'Use notebook_get to find cell IDs.' This guides the agent on prior steps, though it does not explicitly mention when not to use this tool or compare to similar mutation tools like cell_move.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cell_executeA
Execute a specific code cell and return its output. The kernel state persists between executions (variables, imports, etc. remain in memory). Only code cells can be executed. Outputs are saved back to the .ipynb file.
python_path controls which Python interpreter runs the kernel:
"" or omitted: uses the server's own Python (sys.executable) the first time; subsequent calls reuse the already-running kernel regardless.
Absolute path: e.g. "/home/user/myproject/.venv/bin/python"
Name on PATH: e.g. "python3.11" Only takes effect when a new kernel is being started (no kernel running yet). Use kernel_restart to switch an already-running kernel to a different Python.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| cell_id | Yes | ||
| timeout | No | ||
| python_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are silent; description adds critical behavior: kernel state persists between executions, outputs saved to .ipynb file, and python_path control details. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with action, efficient two paragraphs. Could be slightly tighter but no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key behavioral aspects (persistence, file saving, python_path). Missing output format description or error handling, but sufficient for typical usage given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage; description explains python_path in detail and implies cell_id usage. However, name and timeout are not explained, leaving some ambiguity despite the useful python_path clarification.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Execute a specific code cell and return its output', specifying verb, resource, and scope. It distinguishes from siblings like cell_add and notebook_execute_all by focusing on single code cell execution with kernel state persistence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides guidance on when to use (only code cells) and explains when python_path takes effect, but lacks explicit comparison to alternatives like notebook_execute_all or kernel_start. Includes context on when to use kernel_restart for switching Python.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cell_moveA
Move a cell to a new position in the notebook. new_position is 0-indexed. Use notebook_get to see current positions.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| cell_id | Yes | ||
| new_position | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-readonly, so the description's mention of 'move' is expected. It adds the 0-indexed detail and a hint about notebook_get, but does not disclose side effects or boundary conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with key information front-loaded, no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Basic information is present, but missing details like error handling (out-of-range positions), behavior for same position, and validation of name/cell_id, which would improve completeness given the lack of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description partially compensates by explaining new_position's 0-indexed nature, but does not clarify the role of name or cell_id beyond their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action (move), the resource (cell), and the target context (notebook), clearly distinguishing it from siblings like cell_add or cell_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides specific guidance: new_position is 0-indexed and suggests using notebook_get to see current positions, though it does not explicitly state when not to use this tool or mention alternatives beyond notebook_get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cell_updateA
Update the source content of a cell. For code cells, this clears existing outputs and execution count since the code has changed. Use notebook_get to find cell IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| cell_id | Yes | ||
| source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a key behavioral trait: updating a code cell clears its outputs and execution count. This adds transparency beyond the annotations, which are neutral. However, it does not mention other potential side effects or permanence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: three sentences that efficiently convey the purpose, a behavioral nuance, and a practical usage hint. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose and a key side effect but omits explanation of the 'name' parameter and does not indicate the return value or response format. Since there is no output schema, the agent would benefit from knowing what to expect after invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description must explain all parameters. It only indirectly addresses 'cell_id' via the usage tip and mentions 'source' as content. The 'name' parameter is not explained, leaving ambiguity. This is insufficient for a 3-parameter required tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates the source content of a cell, distinguishing it from siblings like cell_add or cell_execute. It also advises using notebook_get for cell IDs, reinforcing its specific purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context (update cell source) and a useful prerequisite (find cell IDs with notebook_get). It does not explicitly contrast with alternatives like cell_add or cell_delete, but the purpose is distinct enough given the siblings list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notebook_directoryARead-only
Get the current working directory for notebook operations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so the description adds minimal behavioral context. It confirms the read-only nature but does not elaborate on possible behavior (e.g., what happens if no directory is set).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that conveys the tool's purpose with no unnecessary words. It is appropriately sized for a simple getter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, a single-line description may suffice. However, the lack of an output schema means the description does not clarify what the return value is (e.g., a string path), which could limit completeness for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so schema coverage is effectively 100%. The description adds no parameter information, but none is needed. Baseline score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and the resource ('current working directory for notebook operations'). It implicitly distinguishes from the sibling 'set_notebook_directory' by focusing on retrieval rather than modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. While the purpose is clear, the lack of mention of the sibling 'set_notebook_directory' or any context about when not to use it reduces the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kernel_interruptAIdempotent
Send an interrupt signal to the running kernel. Use this to stop a long-running or infinite-loop cell execution.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, and idempotentHint. The description adds that the tool stops execution, which is a behavioral trait not fully captured by annotations. However, it does not disclose more nuanced behaviors like the effect on kernel state or whether interruptions can be stacked.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that correctly front-load the purpose and usage. Every word is necessary; there is no fluff or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one required parameter with no explanation and no output schema, the description should clarify the parameter. The current description leaves ambiguity about what 'name' refers to, making it incomplete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, 'name', has no description in the schema (0% coverage). The tool description does not mention the parameter at all, leaving the agent to guess what 'name' refers to (e.g., kernel name, cell name). This is a critical omission.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool sends an interrupt signal to the running kernel to stop long-running or infinite-loop cell execution. The verb 'send' and resource 'interrupt signal' are specific, and the purpose is distinct from sibling tools like kernel_restart or kernel_start.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use the tool: 'to stop a long-running or infinite-loop cell execution.' This provides clear guidance. However, it does not mention when not to use it or list alternatives (e.g., kernel_restart for a full restart), which would strengthen the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kernel_listARead-only
List all kernels currently tracked in this session, with their status (idle/dead) and Python interpreter path. Only kernels started during this MCP session are listed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and the description adds the important scope that only kernels started during this session are listed, which is beyond the annotation alone. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the action and resource, every word adds value. No wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool with annotations, the description is fully complete: it states the purpose, output content, and scope constraint. No output schema is needed as the description covers the return details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is 100%. The description adds value by clarifying what information is returned (status and interpreter path), earning a baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb 'list', the resource 'kernels', and includes output details (status, interpreter path) and the scope constraint (only kernels started in this session), clearly distinguishing it from sibling tools like kernel_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for obtaining an overview of all session kernels, but it lacks explicit guidance on when to use this tool versus alternatives such as kernel_status or kernel_restart, relying on implicit context from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kernel_restartADestructive
Restart the kernel for a notebook. Clears all in-memory state (variables, imports, etc.). Cell outputs saved to the .ipynb file are not affected.
python_path: optionally switch to a different Python interpreter on restart.
"" or omitted: keep using the same Python the kernel was started with.
Absolute path: e.g. "/home/user/project/.venv/bin/python"
Name on PATH: e.g. "python3.11" If python_path differs from the current kernel's Python, the kernel is fully replaced rather than just restarted in-place.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| python_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool clears in-memory state (aligning with destructiveHint=true) and explains the behavior when python_path differs. Annotations already provide basic hints, but the description adds valuable context beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, starting with the main action, then effects, then parameter details. Every sentence adds value without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main action, effects, and python_path parameter in detail. The only gap is the missing explanation of the 'name' parameter. Overall, it is fairly complete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides rich detail for python_path (three cases and implications) but does not explain the required 'name' parameter, which is critical for correct usage. Schema coverage is 0%, so the description should cover both.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Restart the kernel for a notebook') and the resource. It distinguishes from siblings like kernel_interrupt and kernel_start by explaining what is reset and what is preserved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use the python_path parameter and the behavior of restart vs full replacement. However, it does not explicitly address when to use this tool over alternatives like kernel_interrupt or kernel_start.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kernel_startADestructive
Shut down any existing kernel for this notebook and start a completely fresh one. Unlike kernel_restart, this always creates a new kernel process from scratch — even if the Python interpreter is unchanged. Use this at session start to enforce a specific Python environment, or to guarantee a clean slate.
python_path: which Python to use for the new kernel.
"" or omitted: uses the server's own Python (sys.executable)
Absolute path: e.g. "/home/user/project/.venv/bin/python"
Name on PATH: e.g. "python3.11" Not supported when connected to a remote server (use remote_connect to select the server; the remote server controls the interpreter).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| python_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, but description adds value by explaining the fresh start and the python_path restriction with remote servers, which annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: main action, comparison, use cases, then parameter details. Each sentence serves a purpose with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers main action, differentiation, use cases, and a constraint. Missing explanation of the 'name' parameter, but overall adequate for a destructive tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must explain parameters. It details python_path well but fails to explain the 'name' parameter, leaving a significant gap in parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it shuts down existing kernel and starts a fresh one. It explicitly differentiates from sibling kernel_restart by noting it always creates a new process from scratch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when to use ('at session start', 'to guarantee a clean slate') and when not ('not supported when connected to a remote server'), with alternative suggested (use remote_connect).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kernel_statusARead-only
Get the current status and Python interpreter of the kernel for a notebook. Status is one of: 'not_started', 'idle', or 'dead'. python_path shows which Python executable the kernel is using (null if not started).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and the description adds value by detailing possible status values and explaining when python_path is null. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no fluff. The description is front-loaded with the main purpose and includes essential details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity and presence of annotations, the description is mostly complete. It explains the returned status and python_path, though it does not detail the full output structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'name' is not explained in the description. With 0% schema coverage, the tool should clarify what 'name' refers to (e.g., notebook name), but it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Get' and the resource 'status and Python interpreter of the kernel for a notebook.' It distinguishes from sibling tools like kernel_start or kernel_restart by focusing on status retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly guide when to use this tool vs alternatives. It implies it's for checking status, but no exclusions or conditions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_as_scriptARead-only
Return the entire notebook as a single Python script string.
Each cell is preceded by a # %% marker (the convention used by VSCode, Spyder, and nbconvert) so the script can be analysed, diffed, or reasoned about as a complete program.
Code cells: source pasted verbatim under their marker.
Markdown cells: each line prefixed with "# " under their marker. Omitted entirely when include_markdown=False.
Raw cells: always skipped.
The script is returned in the response; no file is written to disk.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| include_markdown | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds detailed behavior: each cell preceded by # %%, markdown cells prefixed with '# ', raw cells skipped, and no file written. Fully discloses behavior beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise and well-structured with bullet points, though slightly verbose in explaining the marker format. It front-loads the core purpose and uses clear sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (2 parameters, no output schema), the description fully covers all relevant aspects: input parameters, behavior for each cell type, return format, and side-effect statement. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by explaining include_markdown's effect. However, the 'name' parameter is not explicitly defined beyond context; the description could be clearer about its role (e.g., notebook identifier). Good but not perfect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the entire notebook as a Python script string, detailing the format with # %% markers and handling of code, markdown, and raw cells. This distinct purpose differentiates it from siblings like notebook_get or cell_execute.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool for analysis, diffing, or reasoning, and that no file is written. It implicitly contrasts with execution or other retrieval tools, but lacks explicit 'do not use if' statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_createA
Create a new Jupyter notebook (.ipynb) in the working directory. The .ipynb extension is added automatically if not included. Returns the notebook name and path on success.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide basic non-read-only hint, but description adds value by revealing automatic extension handling and return of name/path. However, it does not mention overwrite behavior or error conditions, which are minor omissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences covering creation, extension behavior, and return value. No redundant words, and key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers purpose, parameter behavior, and return info. Minor gap: no mention of error cases or existence checks, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description compensates by explaining the name parameter's extension handling. This adds meaning beyond the schema's bare string type. No details on validation or constraints, but adequate for a single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create' and the resource 'Jupyter notebook (.ipynb)'. It distinguishes from sibling tools like notebook_delete, notebook_get, etc., by specifying creation. The detail about automatic .ipynb extension addition further clarifies purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating notebooks but does not explicitly state when to use this tool versus alternatives like notebook_as_script or notebook_execute_all. No exclusion criteria or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_deleteADestructiveIdempotent
Delete a notebook file and shut down its kernel if running. The .ipynb extension is optional.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds the kernel shutdown behavior, which is useful but doesn't cover reversibility or error conditions. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences, front-loaded with the primary action, and no unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with one parameter and no output schema, the description covers the main action and a key behavior (kernel shutdown). It lacks error handling details but is largely sufficient given the annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description adds meaning by noting that the .ipynb extension is optional, which clarifies the 'name' parameter. However, it doesn't specify whether the name should be a filename or full path, limiting completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: delete a notebook file and shut down its kernel. It differentiates from sibling tools like notebook_create or notebook_list by specifying the deletion and kernel shutdown. The optional extension note adds clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool versus alternatives, nor does it mention prerequisites (e.g., notebook must exist) or when not to use it. This lack of context makes it harder to choose among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_execute_allA
Execute all code cells in the notebook in order. Markdown and raw cells are skipped. If stop_on_error is True (default), execution stops at the first cell that raises an exception. Returns a summary of results for each code cell executed.
python_path: which Python to use if no kernel is running yet (see cell_execute).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| timeout | No | ||
| stop_on_error | No | ||
| python_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, so the description provides necessary behavioral details: stop_on_error behavior, skipping non-code cells, and return of summaries. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose and keeps sentences focused. It could integrate the python_path explanation more efficiently, but overall concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description mentions returning a summary but lacks details on its structure. Edge cases like missing notebook or kernel state are not addressed. Adequate for basic understanding but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It explains stop_on_error and python_path, but fails to describe 'name' (required) and 'timeout' (default 30). Only 2 of 4 parameters are covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool executes all code cells in order, skipping markdown and raw cells. This distinguishes it from sibling tool cell_execute (single cell) and other notebook tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for batch execution but does not explicitly state when to use this tool versus cell_execute. The reference to cell_execute for python_path hints at its existence but lacks direct comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_getARead-only
Read a notebook and return its full structure: all cells with their IDs, types, source, execution counts, and outputs.
Use the returned cell IDs with cell_update, cell_delete, cell_move, and cell_execute to modify or run specific cells.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description confirms read-only behavior. It adds what is returned (cell IDs, types, etc.), but does not mention any potential limitations or prerequisites. Still, it is consistent and adds useful detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. Front-loaded with the main action and immediately provides actionable information on how to use the output. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description covers purpose, return contents, and collaboration with siblings. No gaps remain for an agent to understand how to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage for the only parameter 'name'. The description does not clarify what 'name' refers to (e.g., notebook name or path). While the parameter is simple, the description should compensate but fails to do so.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Read a notebook and return its full structure', listing specific components (cell IDs, types, source, execution counts, outputs). This verb+resource combination distinguishes it from siblings like notebook_list or cell_add.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (to read a notebook and get cell details) and instructs to use returned cell IDs with cell_update, cell_delete, cell_move, cell_execute for modifications. Provides clear context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_listARead-only
List all .ipynb notebooks in the working directory.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation 'readOnlyHint: true' already indicates read-only behavior. The description adds that it lists notebooks in the working directory, which is consistent and provides context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no superfluous words. It is front-loaded and efficiently communicates the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless, read-only list tool, the description is adequate. No output schema exists, but the return value (list of notebook filenames) is implied. Could mention ordering or filtering, but not necessary given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and the schema has 100% coverage. The description adds no parameter info, which is appropriate given zero parameters. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all .ipynb notebooks in the working directory' uses a specific verb ('List') and resource ('.ipynb notebooks'), clearly distinguishing it from sibling tools that create, delete, execute, or manipulate notebooks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The purpose is implied, but there is no 'when not to use' or comparison with sibling tools like 'notebook_get' or 'notebook_as_script'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remote_connectA
Connect to a remote Jupyter Server and route all kernel operations to it. Notebooks continue to be saved locally; only code execution runs on the remote kernel. Useful for accessing remote compute, GPUs, or data.
server_url: Base URL of the remote Jupyter Server, e.g. "http://hostname:8888" token: API token (the value printed by Jupyter on startup, or set via --NotebookApp.token / --ServerApp.token)
Any currently running remote kernels are shut down before switching.
| Name | Required | Description | Default |
|---|---|---|---|
| server_url | Yes | ||
| token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only, non-destructive, non-idempotent. The description adds context that notebooks remain local and existing remote kernels are killed, which is valuable behavioral insight beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct with three sentences and two parameter lines, front-loading the purpose and avoiding unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's effect, parameter formats, and a caution about shutting down existing kernels, making it complete for a connection tool without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining 'server_url' with an example and 'token' with its origin, adding essential meaning beyond the schema's title and type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Connect' and the resource 'remote Jupyter Server', and specifies that only kernel operations are routed remotely while notebooks stay local, distinguishing it from sibling tools like 'remote_disconnect' and 'kernel_start'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the use case 'accessing remote compute, GPUs, or data', and mentions that existing remote kernels are shut down, but does not compare to alternatives like 'kernel_start' for local kernels.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remote_disconnectAIdempotent
Disconnect from the remote Jupyter Server and switch back to local kernels. All running remote kernels are shut down.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'All running remote kernels are shut down', indicating a destructive side effect, but annotations set destructiveHint to false. This contradiction results in a score of 1.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the primary action and add essential detail. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters, the description covers purpose and key behavior. It could mention prerequisites like being connected, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema coverage is 100%. The description does not add parameter info, but baseline for 0 parameters is 4, and no additional detail is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Disconnect' and the resource 'remote Jupyter Server', and distinguishes from siblings like remote_connect by explicitly mentioning the action and its side effect of shutting down remote kernels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (to disconnect and return to local kernels), but lacks explicit guidance on when not to use or alternatives. It states the shut-down effect, which provides context but no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remote_statusARead-only
Show whether a remote Jupyter Server is connected and which URL it is using.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, and the description adds value by specifying that it shows connection status and URL. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no unnecessary words, front-loaded information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately indicates what the tool returns (status and URL). It could be more specific about output format, but for a simple status check it is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters are defined, and schema coverage is 100%. Description does not need to explain parameters, and it adds no redundant information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Show') and resource ('remote Jupyter Server') and clearly indicates what information is provided (connected status and URL). It distinguishes from sibling tools that modify connections (remote_connect, remote_disconnect).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for checking connection status but does not explicitly state when to use it over alternatives or provide usage context. However, sibling tools suggest its complementary role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_notebook_directoryC
Set the working directory for notebook operations. All subsequent notebook operations will use this directory. Useful for specifying where notebooks should be saved and loaded from.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are present (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description describes a write operation, consistent with annotations. However, it adds no extra behavioral context, such as whether the directory is created if missing or if validation occurs, which limits transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short with three sentences, but some redundancy exists between 'All subsequent notebook operations will use this directory' and 'Useful for specifying where notebooks should be saved and loaded from'. It could be more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (single parameter, no output schema), the description covers the basic purpose and effect. However, it omits details like whether the directory must already exist, if it's session-scoped, or if it affects existing operations, leaving minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required parameter 'path' with 0% description coverage. The description does not elaborate on its format, examples, or allowed values, providing no added meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sets the working directory for notebook operations, effectively communicating its function. However, it could better distinguish from `get_notebook_directory` by emphasizing the 'set' aspect, though the verb 'Set' already does so.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that subsequent notebook operations will use this directory and that it's useful for saving/loading, offering some guidance on when to use. It lacks explicit when-not-to-use or alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
21 tool updates
v0.1.4- First observed
cell_add - First observed
cell_delete - First observed
cell_execute - First observed
cell_move - First observed
cell_update - First observed
get_notebook_directory - First observed
kernel_interrupt - First observed
kernel_list - First observed
kernel_restart - First observed
kernel_start - First observed
kernel_status - First observed
notebook_as_script - First observed
notebook_create - First observed
notebook_delete - First observed
notebook_execute_all - First observed
notebook_get - First observed
notebook_list - First observed
remote_connect - First observed
remote_disconnect - First observed
remote_status - First observed
set_notebook_directory
TDQS
Each tool targets a distinct action or resource: cell, kernel, notebook, remote, or directory. The kernel-related tools are clearly differentiated (interrupt vs restart vs start), and similarly for cells and notebooks. There is no functional overlap that could confuse an agent.
All tool names follow a consistent 'resource_verb' pattern: e.g., cell_add, kernel_restart, notebook_get, remote_connect, set_notebook_directory. The naming is uniform and predictable, making it easy for an agent to infer tool purposes.
With 21 tools, the set is comprehensive but not excessive. The number is appropriate given the need to cover notebook CRUD, cell manipulation, kernel management, remote connectivity, and directory handling. It is slightly on the high side but remains well-scoped.
The tool surface covers all essential notebook operations: create/read/update/delete for notebooks and cells, execution (single cell and whole notebook), kernel lifecycle (start, restart, interrupt, status, list), remote server connection for execution, and workspace directory management. There are no obvious gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
System-of-record notebook for AI coding agents: pages, datastores, tasks, skills over MCP.
Connect AI agents to 1000+ apps with managed authentication and tool-calling.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to interact with Jupyter notebooks via MCP tools for querying, modifying, executing, and setting up notebooks, with state preservation and real-time collaboration.444Apache 2.0
- AlicenseAqualityCmaintenanceEnables programmatic interaction with Jupyter notebooks, allowing reading, editing, and executing cells via Claude.632MIT
- AlicenseAqualityDmaintenanceEnables AI agents to execute Python, TypeScript, and JavaScript code in persistent Jupyter kernels with stateful variables and imports across interactions.74MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to execute Jupyter notebook cells with persistent kernel state, output persistence, and structured JSON control surface.2-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Try3D/JupyterMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server