📖 Installation Guide — quick start, manual setup, and troubleshooting
MCP server for Notepad++ on Windows. Uses FastMCP 3.1.0 with portmanteau tools (fewer tools, same coverage), optional HTTP bridge, sampling (Ollama-compatible HTTP or client LLM), prompts, skill:// resources, and agentic workflows.
Editor vs this repo: Notepad++s own strengths (Scintilla, plugins, macros, sessions, ) are separate from what this MCP exposes. See docs/EDITOR_AND_MCP_SCOPE.md for a clear split and a fuller editor-side overview.
| Item | Notes |
|---|---|
| OS | Windows 10/11 (64-bit) |
| Editor | Notepad++ 8+ installed |
| Python | 3.12+ (requires-python in pyproject.toml) |
| API | pywin32 (pulled in on Windows) |
git clone https://github.com/sandraschi/notepadpp-mcp
cd notepadpp-mcp
justThis opens an interactive dashboard showing all available commands. Run just bootstrap to install dependencies, then just serve or just dev to start.
If you don't have just installed:
Recommended: uv.
From a clone of this repo:
git clone https://github.com/sandraschi/notepadpp-mcp.git
Set-Location notepadpp-mcp
uv sync
uv run notepadpp-mcp --helpOr install the package in editable mode:
uv pip install -e ".[dev]"When the package is published to PyPI, you can run it with:
uvx notepadpp-mcp
The published console script is notepadpp-mcp (notepadpp_mcp.server:run in pyproject.toml).
- Default stdio: what most MCP hosts use (Claude Desktop, Cursor, etc.). No extra flags.
- Optional HTTP bridge: FastAPI + uvicorn on
127.0.0.1, MCP HTTP at/mcp.
notepadpp-mcp --http --port 10815
Change --port if 10815 is taken (see central port registry if you use a fleet of MCP webapps).
Claude Desktop (claude_desktop_config.json) point command/args at your install. Example using uv from a fixed repo path:
{
"mcpServers": {
"notepadpp-mcp": {
"command": "uv",
"args": ["run", "--directory", "D:/Dev/repos/notepadpp-mcp", "notepadpp-mcp"]
}
}
}If notepadpp-mcp is on PATH:
{
"mcpServers": {
"notepadpp-mcp": {
"command": "notepadpp-mcp",
"args": []
}
}
}Legacy: older docs referenced python -m notepadpp_mcp.tools.server. Prefer notepadpp-mcp unless you are debugging that module.
The assistant calls MCP tools by name; you do not run these in PowerShell. Examples of operations inside portmanteau tools:
| Tool | Typical operation values |
|---|---|
file_ops |
open, new, save, info |
text_ops |
insert, find |
status_ops |
help, system_status, health_check |
tab_ops |
list, switch, close |
session_ops |
save, load, list |
linting_ops |
python, javascript, json, markdown, |
display_ops |
fix_invisible_text, fix_display_issue |
plugin_ops |
discover, install, list, execute |
Also: suggest_notepad_plan, agentic_notepad_workflow (orchestration), depending on build.
- save Copies Notepad++s live
session.xml(typically%APPDATA%\Notepad++\session.xml), which lists all open buffers, into a named file under%APPDATA%\Notepad++\notepadpp-mcp-sessions\. Format matches what Notepad++ uses for Load Session /-openSession. If the live file is missing or lists no files, the server falls back to a minimal session built from the active tab path when that path exists on disk. - load Runs
notepad++.exe -openSession "<saved.xml>". Whether a new or existing instance opens files depends on your Multi-instance settings in Notepad++. - Overrides
NOTEPADPP_SESSION_STORAGE_DIR(where named*.xmlare stored),NOTEPADPP_LIVE_SESSION_XML(override path to the livesession.xml, e.g. portable or-settingsDirlayouts).
Optional. Set env vars as documented in the server / NotepadSamplingHandler, for example:
NOTEPADPP_SAMPLING_BASE_URLOpenAI-compatible base (e.g. Ollamahttp://127.0.0.1:11434/v1)NOTEPADPP_SAMPLING_MODELNOTEPADPP_SAMPLING_USE_CLIENT_LLMlet the MCP host run sampling when supported
| Tool | Purpose |
|---|---|
| file_ops | Open, new, save, file info |
| text_ops | Insert / find in buffer |
| status_ops | Help, system status, health |
| tab_ops | List / switch / close tabs |
| session_ops | Save / load / list workspace sessions |
| linting_ops | Python, JS, JSON, Markdown, (uses ruff / eslint on PATH when available) |
| display_ops | Invisible text / display glitches |
| plugin_ops | Discover / install / list / execute plugins |
Responses use a consistent dict shape: success, message or summary, plus error / recovery_options where relevant.
docs/EDITOR_AND_MCP_SCOPE.mdNotepad++ (editor) vs this server: strengths of the editor, boundaries of the MCP bridgedocs/NOTEPADPP_MACROS.mdMacros (what people use them for,shortcuts.xml, curated-set / future tool ideas)src/notepadpp_mcp/docs/API notes, examples, PRD where presentsrc/notepadpp_mcp/docs_manifest.pyREST/MCP overview for the web bridge (when enabled)
uv pip install -e ".[dev]"
uv run pytest src/notepadpp_mcp/tests/
uv run ruff check src/notepadpp_mcp tests
uv run ruff format src/notepadpp_mcp testsOptional: python demonstration_test.py or project dev.py if present for integration smoke tests.
Work that is planned or open good first issues for contributors:
- Multi-instance / multi-window target a specific Notepad++ HWND when several are open
- Richer plugin flows coordinated multi-plugin steps, better error surfaces from Plugin Admin
- Linting HTML/CSS, optional config files for linters
- Config profiles server-side defaults (paths, timeouts, auto-start)
- Batch first-class batch file operations with progress reporting
- Web UI - Align docs with the actual dashboard package (e.g.
web_sota/) and ports - Tests / coverage - Raise coverage; keep CI green on Windows runners
- Macros - Curated XML snippets in-repo; optional read/list/merge for
%APPDATA%\Notepad++\shortcuts.xml(seedocs/NOTEPADPP_MACROS.md)
This MCP server includes a free, premium web interface for monitoring and control. By default, the web dashboard runs on port 10814. (Assigned ports: 10814 (Web dashboard frontend), 10815 (Web dashboard backend (API)))
To start the webapp dashboard and backend:
.\start.ps1-Headless: Runs everything in the background (hidden windows).-BackendOnly: Starts only the Python API server (no Vite frontend).-NoBrowser: Prevents the automatic browser opening.
Access the dashboard at http://localhost:10814.
Older changelog bullets (multi-instance, plugin analytics, etc.) are folded into the list above where they still apply.
- Notepad++ not found Install Notepad++, start it once, or enable auto-start behavior if your build supports it.
- Windows API not available Use Windows; install pywin32 in the same environment as the server.
- Tools missing in the client Restart the host, check MCP logs, confirm
notepadpp-mcpruns without errors from a terminal. - Session save empty / fails Notepad++ may not refresh
session.xmluntil you have opened saved files or restarted the editor; ensure Settings > Preferences > Backup session behavior matches your expectations. For portable installs, setNOTEPADPP_LIVE_SESSION_XMLto the correctsession.xml.
- 0.2.x
session_opspersists named sessions: copies livesession.xml, loads via-openSession(see README section Session snapshots). - 0.2.0 FastMCP 3.1.0, sampling, skills, prompts, agentic workflow, HTTP bridge + web hooks as implemented in
server.py. - Earlier Portmanteau tool consolidation, linting and plugin tooling.
This project adheres to SOTA 14.1 industrial standards for high-fidelity agentic orchestration:
- Python (Core): Ruff for linting and formatting. Zero-tolerance for
printstatements in core handlers (T201). - Webapp (UI): Biome for sub-millisecond linting. Strict
noConsoleLogenforcement. - Protocol Compliance: Hardened
stdout/stderrisolation to ensure crash-resistant JSON-RPC communication. - Automation: Justfile recipes for all fleet operations (
just lint,just fix,just dev). - Security: Automated audits via
banditandsafety.
MIT see LICENSE.