Skip to main content
Glama
g0g5

jupyter-notebook-mcp

by g0g5

jupyter-notebook-mcp

A FastMCP server for loading, editing, searching, and saving Jupyter notebooks (.ipynb) through MCP tools.

The server keeps one notebook open at a time and uses live cell indices that update as cells are inserted or removed.

Features

  • Single active notebook session with in-memory state (path, notebook object, dirty flag)

  • Autosave current notebook before loading a different notebook

  • Real insert/remove semantics: indices shift immediately after edits

  • Return full notebook as plain-text blocks when loading

  • Save/import notebook content in markdown block format

  • Case-insensitive keyword search with contextual snippets

  • Actionable ToolError messages for common failure cases

Related MCP server: Jupyter MCP Server

Tool API

The server exposes the following MCP tools:

  • load_notebook(path: str)

    • Loads and validates a notebook

    • Autosaves the currently open notebook first (if any)

    • Returns active cells as plain-text blocks: [index:N type:...] + full content

  • save_notebook(path: str | None = None)

    • Saves current notebook (optionally to a new path)

  • read_cell(index: int)

    • Returns full source for one active cell

  • add_cell(content: str, cell_type: str = "code", index: int | None = None)

    • Appends a new cell when index is omitted

    • Inserts below the referenced cell when index is provided (insert at index + 1)

    • Returns plain-text blocks for changed cell + adjacent cells

  • replace_cell(index: int, content: str)

    • Replaces entire cell source

  • remove_cell(index: int)

    • Removes a cell by index with immediate reindexing

    • Returns plain-text blocks for changed cell + adjacent cells

  • delete_cell(index: int)

    • Backward-compatible alias of remove_cell

  • save_markdown(path: str)

    • Saves the same text returned by load_notebook() to a markdown file path

  • from_markdown(path: str)

    • Reads exported markdown blocks from disk and replaces current notebook cells

  • search_cell(keywords: str)

    • Space-separated keyword search (all keywords must match)

Requirements

  • Python >=3.12

  • uv for environment and dependency management

MCP Installation

Run directly with uvx (no persistent install):

uvx jupyter-notebook-mcp --from git+https://github.com/g0g5/jupyter-notebook-mcp

Install as a uv tool:

uv tool install jupyter-notebook-mcp --from git+https://github.com/g0g5/jupyter-notebook-mcp

Quick Start

uv sync
uv run python -m jupyter_notebook_mcp

You can also run via the project script entrypoint:

uv run jupyter-notebook-mcp

MCP Client Configuration (stdio)

Use one of the following configurations.

Option 1: run with uvx from GitHub:

{
  "mcpServers": {
    "jupyter-notebook-mcp": {
      "command": "uvx",
      "args": [
        "jupyter-notebook-mcp",
        "--from",
        "git+https://github.com/g0g5/jupyter-notebook-mcp"
      ]
    }
  }
}

Option 2: after uv tool install, run installed command directly:

{
  "mcpServers": {
    "jupyter-notebook-mcp": {
      "command": "jupyter-notebook-mcp",
      "args": []
    }
  }
}

Development

Install/update dependencies:

uv sync

Typecheck (lightweight compile check):

uv run python -m py_compile jupyter_notebook_mcp/*.py tests/*.py

Run tests:

uv run pytest -v

Project Structure

jupyter-notebook-mcp/
|- jupyter_notebook_mcp/
|  |- __main__.py                  # Module entrypoint for `python -m jupyter_notebook_mcp`
|  |- server.py                    # FastMCP app and tool registration
|  |- session.py                   # Shared in-memory notebook session state
|  |- notebook_io.py               # Notebook load/save and validation
|  |- cell_ops.py                  # Cell read/edit operations
|  |- markdown_codec.py            # Markdown export/import parsing
|  |- search.py                    # Keyword search and snippet extraction
|  \- formatting.py                # Cell block and markdown preview formatting
\- tests/
   |- conftest.py                  # Shared fixtures (session reset)
   |- helpers.py                   # Shared notebook test helpers
   |- test_contract_flow.py
   |- test_session_and_io.py
   |- test_cell_editing.py
   |- test_markdown_codec.py
   \- test_search_and_formatting.py

Behavior Notes

  • If no notebook is loaded, notebook-dependent tools return:

    • No notebook is loaded. Use load_notebook(path) first.

  • Cell indices are always current active indices; insert/remove operations reindex following cells.

  • On save, the server validates notebook structure with nbformat.validate before writing.

Available Tools

10 tools
add_cellA

Insert after index, or append when index is omitted.

cell_type must be one of: code, markdown, raw.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNo
contentYes
cell_typeNocode

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses the insertion-position semantics and the accepted cell_type values, but says nothing about whether a notebook must be loaded first, whether the addition is persisted or in-memory, or any side effects of this mutation.

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 compact sentences, each earning its place: the first covers positioning behavior and the second covers the enum constraint. The most decision-relevant information (insertion semantics) is front-loaded with no filler.

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?

Because an output schema exists, return values need not be explained, and the operation itself is fully specified for a low-complexity, three-parameter tool. The only real gap is the absence of the target-notebook context, which the sibling load_notebook implies but the description never states.

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?

Schema description coverage is 0%, so the description must compensate, and it does for two of three parameters: it clarifies index semantics (insert-after, append when omitted) and enumerates cell_type values that the schema does not constrain. Only content is left undocumented, and its meaning is self-evident from the name.

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 pairs a specific verb (insert/append) with a specific resource (cell), and the positioning rule makes the operation unambiguous. It does not explicitly name sibling tools like replace_cell or remove_cell to sharpen differentiation, so it stops short of a 5.

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?

It explains the conditional behavior of index (insert-after vs append when omitted), which implicitly tells the agent which form to use. However, there is no guidance on when to choose add_cell over replace_cell, remove_cell, or from_markdown, nor any stated prerequisite.

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

delete_cellC

Backward-compatible alias of remove_cell(index).

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes

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?

With no annotations, the description carries the full behavioral burden. It discloses equivalence to remove_cell, but says nothing about irreversibility, out-of-range index handling, or side effects of a destructive operation, all of which matter here.

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?

A single short sentence with no filler, and the alias relationship is stated immediately. Brevity is appropriate, though the terseness leaves the gaps noted in other dimensions.

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?

An output schema exists, so return values are covered, but for a destructive tool with no annotations and an undocumented required parameter, the description omits too much. It should at minimum state that the cell is permanently removed and clarify the index.

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% and the only parameter (index) is undocumented. The description names the argument but adds no meaning beyond the schema — not whether indexing is 0-based, not valid ranges, not what happens for an invalid index.

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 identifies the tool as an alias of remove_cell(index), which conveys its purpose (removing a cell by index) and clearly distinguishes it from siblings like add_cell, replace_cell, and read_cell. It relies on the reader knowing remove_cell, but the operation 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?

'Backward-compatible alias' implies this exists only for legacy callers and that remove_cell is the preferred sibling, which is useful routing guidance. However, it never explicitly states when to use this versus remove_cell, or that new code should avoid it.

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

from_markdownC

Load markdown notebook blocks from disk and replace active cells.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/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 the full burden, but it does disclose one important behavioral fact: the operation replaces active cells, i.e. it is destructive to current in-memory state. It omits prerequisites (must a notebook already be open?), reversibility, and what happens to unsaved changes.

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?

A single efficient sentence that front-loads the verb and resource and packs the side effect into the same clause. No padding, though it is arguably too terse for the behaviors it hides.

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?

An output schema exists, so return values need not be explained, but this is a mutation tool with no annotations and an undocumented path parameter. The description should clarify prerequisites and the interaction with the other notebook/cell siblings; as written it leaves too much for the agent to infer.

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% for the single 'path' parameter, so the description must compensate and does not. 'From disk' loosely implies a filesystem path but gives no format, extension, or whether it is relative to a workspace root.

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

Purpose3/5

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

The description names a verb (Load) and a resource (markdown notebook blocks) plus the side effect (replace active cells). However 'notebook blocks' is jargon-y and it doesn't distinguish itself from load_notebook, which an agent would reasonably pick as the more obvious sibling for loading a notebook.

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?

There is no when-to-use guidance and no alternative named. An agent cannot tell from the text whether this is preferred over load_notebook, or when a markdown-source load is appropriate versus reading individual cells with read_cell.

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

load_notebookA

Load and validate a notebook from disk, then return markdown blocks.

Autosaves the currently open notebook before switching.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/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 and does disclose two non-obvious traits: the load performs validation, and it autosaves the currently open notebook before switching (an implicit mutation side effect). It omits failure/error behavior when validation fails and any permission requirements.

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 short sentences with zero filler; the core action is front-loaded and the side effect is a separate, well-placed clause.

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?

An output schema exists so return values need not be explained further, and the mutation side effect is called out. Only edge-case behavior (invalid notebook, missing file) is left unspecified for this one-parameter 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% and the single 'path' parameter is undocumented in the schema. 'From disk' adds meaningful context that this is a filesystem path rather than a notebook identifier, but format details (absolute vs relative, extensions) are absent.

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?

States a specific verb+resource: 'Load and validate a notebook from disk,' plus the return shape ('markdown blocks'). The verb 'load' clearly contrasts with the sibling save_notebook, though no sibling is named explicitly.

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?

No when-to-use or when-not guidance, and no routing against plausible alternatives such as from_markdown or read_cell. The only contextual sentence concerns a side effect, not selection criteria.

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

read_cellC

Return one active cell by index with type and full source.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/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 behavioral burden. It does say what comes back (type and full source), but is silent on permissions, error behavior for an out-of-range index, and what 'active' means for a cell, leaving real gaps for an unannotated tool.

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?

One front-loaded sentence with no filler; every word carries weight. It is arguably under-specified rather than padded, but the structure itself is 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?

An output schema exists, so return values need not be explained, and the tool is a simple one-parameter read. Still, the undefined notion of 'active cell' and unspecified index semantics leave meaningful ambiguity that the description could have closed.

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% and the single 'index' parameter has no description in the schema. The description only repeats 'by index' without clarifying zero- vs one-based indexing, ordering, or whether it references the notebook's active cell — it fails to compensate for the coverage gap.

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?

States a specific verb (Return) and resource (one active cell), scoped by index, and even names the returned payload (type and full source). It distinguishes itself implicitly from search_cell by saying 'one ... by index', but never names or contrasts a sibling explicitly.

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?

There is no when-to-use or when-not-to-use guidance and no mention of alternatives such as search_cell or load_notebook. The agent must infer the retrieval use case purely from the verb and the parameter.

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

remove_cellC

Remove a cell and return previews of affected neighboring cells.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/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 states that a cell is removed and neighboring previews are returned, but it does not disclose whether removal is permanent, what permissions are required, what happens on invalid index, or any other behavioral trait beyond the obvious mutation.

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?

A single front-loaded sentence with no wasted words. It is appropriately sized for a simple tool, though its terseness contributes to gaps in other dimensions rather than being a structure problem.

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 no annotations, a required index parameter with no schema description, and an ambiguous sibling delete_cell, the description is not complete enough to call the tool correctly. It mentions returned previews (and an output schema exists), but omits essential parameter semantics and selection guidance.

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 must compensate for the single parameter. It never mentions the index parameter, its meaning, range, or base (e.g., 0-based position). The description adds no parameter semantics beyond the schema's bare integer type.

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?

States a specific verb and resource: "Remove a cell." It also adds a return side effect (previews of neighboring cells). However, it does not distinguish itself from the sibling tool delete_cell, so an agent cannot tell which removal tool to choose without opening schemas.

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?

Provides no when-to-use guidance, no prerequisites, and no alternatives. With a sibling named delete_cell, the lack of differentiation is especially problematic. The description merely restates the action.

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

replace_cellC

Replace the full source of the cell at the given index.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes
contentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. 'Replace the full source' does signal a destructive overwrite of existing content, which is useful, but nothing is said about permissions, index bounds, failure behavior, 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.

Conciseness4/5

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

A single efficient sentence with the action and target front-loaded and no wasted words. It is appropriately sized for a simple two-parameter operation.

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?

An output schema exists, so return values need not be explained. But for a mutation tool with no annotations and completely undocumented parameters, the description should disclose more about the destructive overwrite and index requirements to be fully complete.

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, and it does partially: 'index' is identified as a cell index and content as the full cell source. However, it gives no format, type, or bounds details, so the two parameters remain loosely specified.

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?

States a specific verb ('Replace') and resource ('the cell at the given index'), which cleanly separates it from read_cell, add_cell, and remove_cell. It is clear what the tool does, though it offers no explicit sibling differentiation to reinforce the distinction.

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?

There is no statement of when to use this versus add_cell, delete_cell, or read_cell, and no prerequisites such as requiring the index to already exist. The agent must infer the context entirely.

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

save_markdownC

Export active notebook cells to markdown block format on disk.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/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 behavioral burden. It implies a disk-write but says nothing about overwrite behavior, required permissions, whether the file must already exist, or which cells are included beyond 'active'. For a write tool with zero annotation coverage this is a significant gap.

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?

A single front-loaded sentence with no filler. It is efficiently sized, though the terseness borders on under-specification rather than being purely economical.

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?

An output schema exists, so return values need not be explained. However, with no annotations, 0% parameter coverage, and a mutation-implying behavior, the description leaves too much unspecified for an agent to invoke it confidently.

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?

One parameter at 0% schema description coverage, and the description never explains what 'path' means (file path vs. directory, extension handling, relative vs. absolute). The phrase 'on disk' only weakly hints at the destination semantics, so the description does not compensate for the coverage gap.

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 states a specific verb+resource ('Export active notebook cells') plus output format ('markdown block format') and destination ('on disk'). This implicitly distinguishes it from save_notebook (native format) and from_markdown (import direction), though those siblings are never named.

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?

No when-to-use guidance and no alternatives are named, despite obvious candidates in the sibling set (save_notebook for the native format, from_markdown for the reverse direction). The agent must infer the choice from format keywords alone.

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

save_notebookC

Validate and save the active notebook to current or new path.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 carries the full burden of behavioral disclosure. 'Validate' hints that a validation step occurs but never says what is validated, what happens on failure, whether an existing file at 'path' is overwritten, or what permissions are needed for a mutation of this kind.

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?

A single front-loaded sentence with no filler; the operation and its target path behavior come first. It is arguably terse to the point of under-specification, but nothing in it is wasted.

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?

An output schema exists, so return-value explanation is not required. But for a save/mutation tool with zero annotations, the description should disclose overwrite and validation-failure behavior, and it does not; sibling differentiation is also absent.

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% and the sole parameter is undocumented in the schema, so the burden falls on the description. 'To current or new path' usefully clarifies the null-vs-provided convention (default null means save in place), but no format, file extension, or conflict behavior is specified, so it only partially compensates.

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?

States a specific verb pair ('validate and save') and a specific resource ('the active notebook'), so the agent knows exactly what operation is performed. However, it never names or distinguishes itself from the closest sibling, save_markdown, leaving the notebook-vs-markdown distinction to inference.

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?

There is no statement of when to use this tool versus save_markdown or the write-oriented cell tools, and no prerequisites or preconditions are given. The only usable signal is the tool name itself, which is implicit at best.

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

search_cellC

Search cells by space-separated keywords and return matches with snippets.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations exist, so the description carries the full behavioral burden and falls short. It discloses only that snippets are returned and that keywords are space-separated (implying conjunctive matching), but says nothing about scope, case sensitivity, result limits, ranking, or whether empty keywords are valid.

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?

A single compact sentence with no filler, front-loading the action and query format before the return shape. Efficient, though the brevity contributes to the missing behavioral detail elsewhere.

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?

An output schema exists, so return values need not be explained, and the description correctly notes snippets. However, for a search tool with a 0%-documented parameter and no annotations, the absence of scope, matching semantics, and result-limit information leaves meaningful gaps.

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 for the single undocumented keyword parameter. It does clarify the input format ('space-separated keywords'), which is genuinely useful, but says nothing about whether all terms must match, quoting, or special characters.

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 states a specific verb and resource (search cells) and adds query syntax (space-separated keywords) plus result shape (matches with snippets). It distinguishes itself adequately from read_cell by being query-based rather than retrieval-based, though it never names the sibling explicitly.

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?

No guidance on when to use this over read_cell or load_notebook, and no mention of scope (current notebook vs. all notebooks) or any prerequisites. The agent must infer usage entirely from the verb.

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. 10 tool updatesv0.1.0
    • First observedadd_cell
    • First observeddelete_cell
    • First observedfrom_markdown
    • First observedload_notebook
    • First observedread_cell
    • First observedremove_cell
    • First observedreplace_cell
    • First observedsave_markdown
    • First observedsave_notebook
    • First observedsearch_cell

TDQS

B3.2/5.0

Scored across 10 tools

Disambiguation3/5

remove_cell and delete_cell are explicit duplicates, and load_notebook/from_markdown plus save_notebook/save_markdown both involve disk I/O for different formats, causing some confusion despite descriptions clarifying differences.

Naming Consistency4/5

Most tools follow a clear verb_noun snake_case pattern (e.g., load_notebook, read_cell), but from_markdown breaks the verb pattern with a preposition, creating a minor inconsistency.

Tool Count5/5

10 tools is well-scoped for notebook cell manipulation, with each tool serving a distinct purpose except the redundant alias.

Completeness3/5

Covers cell CRUD, search, and markdown import/export, but lacks execution of code cells—a core Jupyter operation—and does not allow changing an existing cell's type, leaving notable gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers