An MCP server that integrates Jupyter notebooks with Claude and other MCP clients, providing tools to execute code, manage cells, and interact with Jupyter kernels
Server has 4 tools with clear verb-noun naming (delete_cell, execute_cell, execute_code, insert_cell). All tools have descriptions (avg 95 chars) and input schemas with typed parameters. However, descriptions are terse (under 150 chars) and lack context on when to use each tool or what they return. Parameter descriptions are present but minimal. No output schemas documented. Error handling guidance is absent. Missing tool annotations (destructiveHint for delete_cell, idempotentHint for execute_cell). Schemas are present but lack detail on return types and structure.
Tool to delete specific cells from a notebook
Execute a cell with configurable timeout and optional streaming progress updates
Execute IPython code directly in the kernel on the current active notebook
Tool to insert a cell at a specified position
No output schemas documented. LLMs cannot infer what fields are returned or plan downstream tool calls. E.g., execute_cell should document whether it returns execution_result, output, error, execution_time.
Descriptions lack context on when to use each tool and what happens. E.g., execute_cell vs execute_code distinction is unclear, when should an agent choose one over the other? Descriptions should answer this.
delete_cell is destructive but has no confirmation step or dry-run option. Agents can irreversibly delete cells without safeguards. Missing confirmation-request pattern.
No tool annotations (destructiveHint, idempotentHint, readOnlyHint). delete_cell should be marked destructive; execute_cell/execute_code should clarify idempotency; insert_cell should be marked as having side effects.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Parameter descriptions are minimal. E.g., 'cell_index' lacks context on valid range (0 to notebook length). 'timeout_seconds' lacks guidance on reasonable values. 'stream' parameter purpose is unclear without reading implementation.