All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added pydantic version constraint (
pydantic>=2.0.0,<2.12.0) to prevent installation failures with pydantic 2.12.0+ (resolves issue #19) - Pydantic 2.12.0 introduced stricter validation that is incompatible with the current version of fastmcp dependency
- Compatibility with breaking changes introduced in FastMCP 2.7.0
- Changed FastMCP dependency version to
fastmcp>=2.7.0,<2.11
- SFTP Support for Remote Notebooks: Added SFTP integration for accessing and managing notebooks on remote SSH servers (resolves issue #2).
- New command-line arguments:
--sftp-root(multiple allowed),--sftp-password,--sftp-key,--sftp-port,--sftp-no-interactive,--sftp-no-agent,--sftp-no-password-prompt,--sftp-auth-mode. - Supports various SSH authentication methods including password, public key (with passphrase), SSH agent, and interactive (2FA).
- Transparently handles file operations on remote SFTP paths.
- Automatic tilde (
~) expansion for remote paths.
- New command-line arguments:
- Enhanced Web Transport with FastMCP (v2.3.4+):
- Integrated
FastMCP'srun()method for robust handling of all transport modes (stdio,streamable-http,sse). --transport streamable-http: Now usesFastMCP's built-in Streamable HTTP, becoming the recommended web transport.--transport sse: Now usesFastMCP's built-in (but deprecated by FastMCP) two-endpoint SSE for legacy compatibility.
- Integrated
- New tool:
notebook_edit_cell_outputto allow direct manipulation and setting of cell outputs. - New tool:
notebook_bulk_add_cellsfor adding multiple cells to a notebook in a single operation. - New tool:
notebook_get_server_path_contextto provide detailed server path configuration for robust client path construction. - Added PowerShell script
run_tests.ps1for test execution on Windows. - Added
examples/demo_tools_list.pyscript, demonstrating client-side MCP handshake andtools/listrequest (part of resolving issue #5).
- Refactored Server Logic: Server now leverages
FastMCP's internalrun()method for all transport modes, simplifying logic and improving reliability. - Improved path handling for Windows-style paths and URL-encoded components (related to issue #4).
- Updated
README.mdwith detailed instructions for all transport modes,mcp.jsonconfigurations, and refined transport recommendations. Added known issues for issue #1 and issue #3. - Updated
examples/demo_tools_list.pyscript to demonstrate client-side MCP handshake andtools/listrequest. - Refined
cursor_rules.mdfor clarity and to reflect new tool capabilities. - Simplified Installation:
uvicornandstarletteare now core dependencies. Optional extras[http]and[sse]removed. All transports supported by default install. - Command-line
--transportchoices are nowstdio,streamable-http, andsse. - Updated code coverage metrics: Overall 82%;
notebook_ops.py92%,server.py93%,tools.py82%,sftp_manager.py74%.
- Custom SSE transport implementation (
cursor_notebook_mcp/sse_transport.py), now handled byFastMCP. - Removed
validate_importstool, which, along withtools/listavailability and updated documentation, resolves issue #5.
- HTTP 405 errors and client fallback issues for web transports by adopting
FastMCP's implementations. - Addressed issues with Windows path interpretation (resolves issue #4).
- Added tools to get an outline and search a notebook, so specific cells can be targeted for read/edit.
- The
notebook_get_outlinemethod analyzes a Jupyter notebook's structure, extracting cell types, line counts, and outlines for code and markdown cells. - The
notebook_searchmethod allows for case-insensitive searching within notebook cells, returning matches with context snippets. - Added dedicated tests for error paths and edge cases in the NotebookTools module, focusing on improving code coverage.
- Added validation tests for notebooks addressing invalid JSON and non-notebook files.
- Added tests for outline extraction with invalid code syntax.
- Added tests for empty search queries and behavior of large file truncation.
- Added edge case tests for export functionality and cell transformations.
- Improved overall code coverage to 84%.
- Improved
tools.pycoverage to 80%. - Achieved 100% coverage for
notebook_ops.py.
- CI workflow using GitHub Actions (
.github/workflows/ci.yml) to run tests on Python 3.9 and 3.12. - Code coverage reporting via
pytest-covand Coveralls integration (>70% overall, >80% for core tools). - Additional tests for
tools.py,server.py, andnotebook_ops.pytargeting error conditions, edge cases, and validation logic. - Test script
run_tests.shto simplify local test execution with necessary environment variables. - Tests for SSE transport layer (
tests/test_sse_transport.py).
- Improved documentation in
README.md:- Added Video Walkthrough section and badges (Downloads, Issues, Coverage, MCP).
- Clarified
stdiovsssetransport configuration inmcp.json, recommending SSE. - Added troubleshooting tips for
stdioenvironment issues. - Refined "Suggested Cursor Rules" for clarity, tone, and promoting proactive tool use.
- Removed invalid comments from JSON examples.
- Explicitly documented external system requirements (Pandoc, LaTeX) for PDF export.
- Updated project metadata (
classifiers,keywords,urls) inpyproject.toml. - Configured
pytestviapyproject.tomlto set environment variables (JUPYTER_PLATFORM_DIRS