Skip to main content
Glama
Liu-Eroteme
by Liu-Eroteme

jupyter-mcp

Kernel-attached MCP server for Jupyter EDA workflows. Built for coding agents that iterate on notebooks: named cells, a dependency DAG, minimal re-execution, condensed outputs, and cheap LLM summaries for navigation.

Why

Editing notebooks through generic file tools is painful for agents:

  • cells have no stable, human-meaningful addresses

  • every change means re-executing the whole notebook from scratch

  • raw outputs (box-drawn tables, base64 charts, ANSI noise) flood context

  • nothing tells you which cells a change invalidates

This server fixes each of those with an opinionated data model.

Related MCP server: Jupyter MCP Server

Concepts

Concept

What it means

Cell names

Every cell has a unique kebab-case name stored in cell.metadata.jupyter_mcp.name. Unnamed cells get auto-names from their first comment/heading.

Revisions

Each cell has a short content hash (rev). Every mutation requires the expected_rev from your latest read — optimistic locking that makes wrong-target and stale edits structurally impossible. No confirmation round-trips.

Dependency DAG

A static AST pass (not runtime tracing) extracts per-cell defines/uses/mutations and builds last-writer-wins edges. Works on unexecuted cells, which is the whole point: edit first, then run.

Staleness

A cell is fresh only if its current source ran on the currently live kernel (freshness is stamped with a per-kernel epoch). Source edits make a cell and its dependents stale; a new or restarted kernel makes everything stale — persisted metadata can never claim freshness against empty kernel state. run executes exactly the stale set, in document order.

Background execution

Every run goes through a per-notebook executor thread. run waits a bounded time (default 60 s); anything longer keeps executing while outputs accumulate in a live buffer — the overview shows RUNNING/QUEUED, read_cells returns output-so-far, interrupt stops it. Oversized output keeps head+tail with explicit dropped markers.

Condensed outputs

Streams merged, ANSI stripped, long text truncated head+tail with explicit markers. Duplicate table reprs collapse to one: uniform → CSV, ragged → JSON. Charts return as real MCP images (downscaled), so the agent sees them.

Summaries

Lazy, batched claude-haiku-4-5 summaries (tldr + description + output summary) cached in cell metadata keyed by content hash. Unchanged cells are never re-summarized. Degrades to deterministic fallbacks (marked *) without API credentials.

Snapshots / undo

Every mutation snapshots the file first (under ~/.cache/jupyter_mcp/); undo_last restores it.

Tools

Tool

Purpose

create_notebook

New empty notebook

notebook_overview

Index: names, revs, staleness, tldrs, edges, lint

read_cells

Full cells (code + condensed outputs + images), by names/slice

add_cell / update_cell / remove_cell / move_cell

Mutations; all take expected_rev; add/update accept run="stale" to fold the edit→run loop into one call

run

Default: all stale cells (minimal recompute). With cells: exactly those, even if fresh, after freshening their stale ancestors (fresh_deps). Bounded wait; continues in background

interrupt

Stop the running cell (KeyboardInterrupt), cancel the queue

restart_kernel

Fresh kernel; marks everything stale

inspect_variable

Type/shape/schema of a live variable plus its richest repr: dataframes as CSV, figures as images, else pretty repr

undo_last

Restore pre-mutation snapshot

summarize_cells

Detailed LLM summaries incl. outputs

search_cells

Search source + names + summaries

Setup

uv sync

Register with Claude Code (.mcp.json in any project, or globally):

{
  "mcpServers": {
    "jupyter": {
      "command": "uv",
      "args": ["run", "--project", "/path/to/jupyter_mcp", "jupyter-mcp"]
    }
  }
}

The server is multi-notebook: every tool takes a notebook path, one kernel per notebook, started lazily in the notebook's directory (so relative data paths behave like in your editor). Kernelspec comes from the notebook's metadata, falling back to python3. Kernels idle longer than 30 minutes are shut down lazily (JUPYTER_MCP_KERNEL_TTL_SECONDS overrides); the next execution restarts them, and epoch-scoped staleness handles the rest. On POSIX, kernels connect over IPC sockets (no open TCP ports).

Summaries & credentials

Summaries use the plain anthropic SDK: credentials resolve from ANTHROPIC_API_KEY or an ant auth login profile automatically. Cost is negligible (Haiku, batched, hash-cached). To disable entirely set JUPYTER_MCP_DISABLE_SUMMARIES=1 — everything else works unchanged.

Development

uv run pytest              # full suite
uv run pytest -m "not kernel"   # skip real-kernel integration tests

Layout: src/jupyter_mcp/ is a plain library (model, dag, condense, kernel, summaries, session) with the MCP surface isolated in server.py; everything below the server is unit-testable without MCP.

Known limitations (v1)

  • The DAG is static: dynamic patterns (globals()[name] = ..., exec, attribute mutation through aliases) are invisible. Method calls only count as mutations for a known allowlist (append, fit, ...) — pure-functional chains (polars) intentionally create no false forward edges.

  • %%bash / %%sql style cells are treated as opaque (no dependencies).

  • Concurrent edits from a live Jupyter editor are detected (the server reloads and rejects the mutation) but not merged.

See docs/ROADMAP.md for what's deliberately deferred — including the phase-2 OKF knowledge base.

Available Tools

14 tools
add_cellA

Add a cell. name must be unique kebab-case. Placement: after (an existing cell name; '' prepends), index, or omit both to append. run="stale" immediately executes every stale cell (the add→run loop in one call) and returns the execution results.

ParametersJSON Schema
NameRequiredDescriptionDefault
runNonone
nameYes
pathYes
afterNo
indexNo
sourceYes
cell_typeNocode

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It adequately discloses the unique name constraint, placement semantics, and the special `run='stale'` behavior that executes cells and returns results. However, it does not mention potential side effects like saving or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with three sentences that front-load the purpose and efficiently cover key behaviors. No redundant or irrelevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 7 parameters and no output schema, the description provides reasonable coverage but lacks return value details for non-stale runs and does not address error conditions or prerequisites. It is adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It covers `name`, `after`, `index`, and `run` meaningfully, but fails to explain `path`, `source`, and `cell_type` beyond their default values, leaving gaps for 3 of 7 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Add' and the resource 'cell', and provides details on naming and placement. However, it does not explicitly differentiate from sibling tools like 'update_cell' or 'remove_cell', but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains placement options and the `run` parameter behavior, which gives context for when to use this tool. However, it lacks explicit guidance on when not to use it or when to prefer alternatives (e.g., 'update_cell' for modifications).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_notebookA

Create a new empty notebook at path (must not exist yet).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
kernel_nameNopython3

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must disclose behavior. It reveals that the tool creates a new empty notebook and enforces a path uniqueness constraint. However, it does not detail return values, error handling, or side effects beyond the constraint. Adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with action and resource, no filler. Efficiently conveys core purpose and a critical constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool has 2 parameters, an output schema, and 14 siblings. The description covers the primary parameter and precondition, but ignores kernel_name and return value behavior. Output schema may compensate, but without seeing it, the description feels slightly incomplete for a creation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description should compensate. It adds meaning for the 'path' parameter by noting the requirement that the path must not exist yet. However, the 'kernel_name' parameter is not mentioned, leaving its purpose to the schema alone. Partial coverage, baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'create', resource 'notebook', and specifies the location via path. The constraint 'must not exist yet' adds precision and distinguishes it from update or overwrite operations. Sibling tools like add_cell or run do not create notebooks, so purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implicitly states when to use: to create a new notebook at a given path, and explicitly states the precondition that the path must not already exist. While it does not list alternatives, the creation action is distinct enough that an agent can infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_variableA

Inspect a live kernel variable without adding a cell: type, shape, schema/columns, length, plus its richest Jupyter repr — dataframes condense to a CSV table, figures come back as images, everything else falls back to a (pretty) repr.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
variableYes
timeout_secondsNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description fully owns disclosure. It specifies how different data types are handled (dataframes->CSV, figures->images, else repr), which is good transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence that efficiently conveys the core purpose and behavior. Could be broken into clearer sections, but no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Lacks parameter details and no output schema. However, it covers return behavior well. Adequate but not fully complete given the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage; description does not explain what 'path' and 'variable' mean, nor the timeout. It adds no semantic value beyond the parameter names and default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it inspects a live kernel variable, listing specific attributes (type, shape, schema/columns, length, Jupyter repr). Distinct from all sibling tools which are cell or notebook operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Mentions 'without adding a cell' implying lightweight inspection, but does not explicitly state when to use this tool versus alternatives or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

interruptA

Interrupt the currently running cell (KeyboardInterrupt in the kernel) and cancel queued cells. Kernel state (variables) survives; interrupted cells read as stale until a successful re-run.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
clear_queueNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses key behaviors: kernel state survives and interrupted cells become stale. However, it does not mention permissions, side effects, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff, front-loaded with the main action. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, return values are covered, but the description lacks parameter explanations. It adequately describes the tool's core functionality but misses details needed for proper invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should explain parameters. It does not mention 'path' or 'clear_queue' at all, leaving their purpose unclear despite somewhat self-explanatory names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool interrupts the currently running cell and cancels queued cells, which is a specific action. It distinguishes itself from siblings like 'run' and 'restart_kernel' by mentioning kernel state survival.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for interrupting a running cell and contrasts with restart_kernel by noting that kernel state survives, but it does not explicitly compare with other siblings or state when to use this tool over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_cellB

Move a cell: after an existing cell ('' moves to top) or to index.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
pathYes
afterNo
indexNo
expected_revYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It only discloses the two positioning options (after, index) but fails to mention side effects, prerequisites, or mutation behavior (e.g., does it require kernel, affect other cells?). The note about empty string for after moving to top is helpful but insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no fluff, front-loaded with the verb 'Move'. Every word earns its place, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters (3 required), no annotations, and no schema descriptions, the description is incomplete. It does not explain the required parameters (name, path, expected_rev) or the output schema, leaving the agent with significant unknowns for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description adds meaning for the 'after' and 'index' parameters (e.g., '' moves to top), but ignores the required parameters 'name', 'path', and 'expected_rev', which remain unexplained. It partially compensates but leaves gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Move' and the resource 'cell', and specifies two distinct ways to specify destination ('after' an existing cell or to an 'index'), which clearly distinguishes this tool from sibling tools like add_cell, remove_cell, or update_cell.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for reordering cells but does not explicitly state when to use this tool versus alternatives like add_cell or update_cell, nor does it provide exclusions or context for when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notebook_overviewA

Index of the notebook: one line per cell (index, name, revision, staleness, one-line summary) plus dependency edges and lint findings. Start here when opening a notebook. Summaries marked with * are deterministic fallbacks, not LLM-generated.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
refresh_summariesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It adds useful context about the output (deterministic fallbacks for summaries) but does not disclose other behavioral traits like idempotency, cost, or side effects. The read-only nature is implied but not stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: two sentences plus a brief note. It is front-loaded with the core purpose, follows with usage guidance, and adds a nuanced detail about fallbacks. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists (documenting return values), the description focuses on what is not obvious from the schema: the content of each line, dependency edges, and lint findings. It is mostly complete for a read-only overview tool, though parameter explanation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%. The tool description does not explain the two parameters ('path' and 'refresh_summaries') beyond what the schema provides (type and default). This leaves the agent guessing about the meaning and usage of parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides an index of the notebook with per-cell details and additional features like dependency edges and lint findings. It also positions itself as the starting point when opening a notebook, distinguishing it from sibling tools like read_cells or search_cells.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes 'Start here when opening a notebook,' which gives clear usage context. However, it does not explicitly state when not to use this tool or name specific alternatives, leaving some ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_cellsA

Read cells with code and condensed outputs (charts attached as images). Select by names (list of cell names), indices (python slice string like '0:5'), or neither for the whole notebook. view: full | code | outputs.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
viewNofull
namesNo
indicesNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses that charts are attached as images and that the tool reads cells, implying read-only behavior. However, it lacks explicit statements about non-destructiveness, permissions, or side effects, which would be expected for a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two front-loaded sentences. The first sentence states the purpose, and the second explains the selection and view options. No redundant or unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 4 parameters and no output schema, the description covers selection methods and view modes adequately. It could mention handling when both 'names' and 'indices' are provided or error cases, but it is sufficiently complete for a read operation in the context of sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the description adds meaningful context for three of four parameters: 'names' (list of cell names), 'indices' (Python slice string), and 'view' (full/code/outputs). The required 'path' parameter is not explained in the description, but overall the description provides sufficient guidance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads cells with code and condensed outputs, including charts as images. It distinguishes from sibling tools like run, add_cell, and search_cells by its specific read-only purpose and selection methods.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how to select cells (by names, indices, or whole notebook) and the view parameter options, but does not provide explicit guidance on when to use this tool vs. alternatives like search_cells or summarize_cells. Usage context is implied rather than explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_cellA

Delete a cell (requires its current rev; undo with undo_last).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
pathYes
expected_revYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that deletion depends on a revision and can be undone. With no annotations, this covers key behavioral traits. Could mention what happens on invalid rev or full side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, no fluff. Every word earns its place. Information is front-loaded (action first, then requirements).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers core behavior and a key constraint, but lacks explanation of 'name' and 'path' parameters, return value (output schema exists), and error scenarios. Brief but leaves gaps for a 3-param tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only 'expected_rev' is hinted at via 'current rev'; 'name' and 'path' are not described. Schema coverage is 0%, and the description does little to explain these parameters' meaning or format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Delete a cell' – a specific verb and resource. Distinguishes from sibling tools like add_cell, update_cell, move_cell.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly mentions prerequisite ('requires its current rev') and provides alternative/recovery via 'undo with undo_last'. Provides clear guidance on when and how to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restart_kernelA

Restart the notebook's kernel (all in-memory state is lost; every code cell becomes stale).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses destructive effects (state loss, stale cells) clearly. No annotations present, so description bears full burden and handles it well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence that is front-loaded with key action and consequences. No superfluous words; highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Core action and outcome are covered, and an output schema exists. However, the missing parameter description leaves a gap in completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description does not explain the 'path' parameter at all. The agent must infer its meaning from context, risking misuse.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action ('restart') and resource ('kernel') with immediate consequences. Distinguishes from sibling tools like interrupt by specifying state loss.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for resetting state via consequences, but no explicit when-to-use or when-not-to-use guidance compared to alternate tools like interrupt.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

runA

Execute cells on the notebook's persistent kernel.

Default (no `cells`): every stale cell in document order — minimal
recompute after edits. With `cells`: exactly those cells, even if fresh
(API calls, randomness), preceded by their stale ancestors so inputs are
trustworthy (`fresh_deps=false` skips the ancestor pass). Outputs are
persisted and returned condensed; charts come back as images; `quiet`
collapses ok cells to status lines. If everything finishes within
`wait_seconds` you get full results; otherwise execution continues in the
background — watch it via notebook_overview / read_cells (live output),
stop it via interrupt.
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
cellsNo
quietNo
fresh_depsNo
wait_secondsNo
timeout_secondsNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite no annotations, the description fully discloses behavior: outputs persisted, charts as images, background continuation on timeout, and the effect of fresh_deps on cell dependencies. No hidden side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph that front-loads the main action. It is detailed but not overly verbose; every sentence contributes. However, it could benefit from bullet points for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with 6 parameters, no output schema, and no annotations, the description covers all key behaviors, edge cases (background execution, fresh ancenstors), and references monitoring/interrupt tools, making it self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds significant meaning for cells, quiet, fresh_deps, and wait_seconds. However, timeout_seconds is not explained, and path is not described (though self-explanatory).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Execute cells on the notebook's persistent kernel.' It distinguishes default behavior (stale cells) from explicit cell execution, and contrasts with sibling tools like interrupt, read_cells, and notebook_overview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: default for minimal recompute, with cells for specific execution, fresh_deps to control ancestor pass, quiet to collapse outputs, and background behavior with wait_seconds. References sibling tools for monitoring and stopping.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_cellsB

Search cell sources, names, summaries, and condensed outputs. Returns matching cells with the matching lines.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
queryYes
regexNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It states that the tool returns 'matching cells with the matching lines', which is straightforward. However, it does not explain what 'condensed outputs' means or whether the operation is read-only or has side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at two sentences, front-loading the purpose. Every sentence provides value without extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description lacks explanation for parameters and does not clarify the structure of results beyond 'matching lines'. Given the complexity of the tool (3 parameters, 0% schema coverage), the description is insufficient for complete understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, and the tool description does not explain any of the three parameters (path, query, regex). An agent cannot determine the meaning of 'path' or the format of 'query', making the tool difficult to use correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the verb 'search' and the resource 'cells', and details what is searched (sources, names, summaries, condensed outputs). It distinguishes this tool from siblings like 'read_cells' or 'summarize_cells' by focusing on searching across cell content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any guidance on when to use this tool versus alternatives (e.g., 'read_cells'). It lacks context on prerequisites, limitations, or conditions that would help an agent decide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

summarize_cellsC

Detailed summaries (LLM): per-cell description plus, optionally, a summary of each cell's current output. Cheaper than reading full cells when orienting in a large notebook.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
namesNo
include_outputsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavioral traits. It mentions 'LLM' hinting at AI-generation, but does not state that the tool is read-only, does not modify cells, or require special permissions. Important behavioral context (e.g., latency, non-destructive nature) is missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences, front-loading the main purpose in the first sentence. However, it could be more structured (e.g., using bullet points) to improve skimmability, and the second sentence appears slightly fragmented. Overall, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given three parameters and an existing output schema, the description is incomplete. It does not cover the 'path' or 'names' parameters, nor does it describe the output structure (what the 'detailed summaries' contain). Error handling, limitations (e.g., notebook size), and return fields are absent, leaving an agent underinformed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description must compensate. It explains that include_outputs controls whether cell output summaries are included, but it does not describe the 'path' or 'names' parameters. For example, it does not clarify that 'names' likely refers to cell identifiers. The output schema exists but is not described, leaving gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides 'detailed summaries (LLM): per-cell description plus, optionally, a summary of each cell's current output.' It specifies the verb (summarize) and resource (cells), and hints at a cheaper alternative to reading full cells, which differentiates it from read_cells. However, it could more explicitly distinguish from sibling tools like notebook_overview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions 'Cheaper than reading full cells when orienting in a large notebook,' giving implied context for when to use it. However, it does not explicitly state when not to use it or name specific alternatives, leaving some ambiguity for an AI agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

undo_lastB

Restore the notebook to its state before the most recent mutation.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description must fully disclose behavior. It discloses the core action but does not mention effects when no prior mutations exist, idempotency, or any destructive side effects. Minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no waste. However, it could include more detail without losing conciseness. Still, it is efficient and directly states the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and parameter documentation, the description does not provide sufficient context for safe usage. No mention of return values from output schema, prerequisites, or edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description fails to explain the required 'path' parameter. The user is left to infer that path refers to the notebook, but no explicit meaning or constraints are provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states 'Restore the notebook to its state before the most recent mutation.' This is a specific verb (restore) and resource (notebook state) with clear scope. It distinguishes itself from sibling tools like add_cell or remove_cell which are mutations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for reverting the last mutation, but does not explicitly state when to use or provide alternatives. Given the tool name and context, it's adequately implied but lacks explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_cellA

Replace a cell's source and/or rename it. expected_rev must be the rev from your latest read of this cell (optimistic locking). Updating source clears the cell's outputs and marks it (and dependents) stale. run="stale" immediately executes every stale cell (the edit→run loop in one call) and returns the execution results.

ParametersJSON Schema
NameRequiredDescriptionDefault
runNonone
nameYes
pathYes
sourceNo
new_nameNo
expected_revYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description discloses important behaviors: updating source clears outputs, marks the cell and dependents stale, and `run='stale'` triggers execution. Missing details include behavior for rename-only updates and consequences of incorrect `expected_rev`.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: two sentences plus a code snippet. It front-loads the purpose and then details side effects and special parameters. Slightly verbose with the code snippet, but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters, no output schema, and no annotations, the description covers the main purpose, side effects, and locking, but lacks details on error cases, return values (except for `run`), and the `path` parameter. Gaps remain for a full understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains `expected_rev` and `run` parameters with specific behavior, but does not clarify `path` and `name` (required params) or `source` and `new_name` beyond the main purpose. With 0% schema description coverage, the description partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Replace a cell's source and/or rename it.' It identifies the specific verb (replace/rename) and resource (cell), and distinguishes from siblings like add_cell or remove_cell.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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 tool, such as requiring `expected_rev` for optimistic locking and the `run` parameter for immediate execution. However, it does not explicitly state when not to use it or mention alternative tools.

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.

  1. 14 tool updatesv0.1.0
    • First observedadd_cell
    • First observedcreate_notebook
    • First observedinspect_variable
    • First observedinterrupt
    • First observedmove_cell
    • First observednotebook_overview
    • First observedread_cells
    • First observedremove_cell
    • First observedrestart_kernel
    • First observedrun
    • First observedsearch_cells
    • First observedsummarize_cells
    • First observedundo_last
    • First observedupdate_cell

TDQS

A3.8/5.0

Scored across 14 tools

Disambiguation5/5

Each tool has a clear, distinct purpose with minimal overlap. The only potential ambiguity is between add_cell's run option and the run tool, but their primary functions are sufficiently different.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., add_cell, create_notebook, inspect_variable). The only minor deviation is undo_last (verb_adverb), but it remains consistent with the overall style.

Tool Count5/5

With 14 tools, the set is well-scoped for a Jupyter notebook server. It covers creation, editing, execution, inspection, and undo operations without being excessive or insufficient.

Completeness4/5

The tool surface covers the core notebook lifecycle (CRUD, execution, inspection, undo). However, there is no explicit save or export tool, which is a minor gap assuming automatic persistence.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A Model Control Protocol (MCP) server that enables remote programmatic control of Jupyter notebooks, allowing AI assistants and applications to create, edit, and execute notebook cells via SSE protocol.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to execute Jupyter notebook cells with persistent kernel state, output persistence, and structured JSON control surface.
    2
    -