░█▄█░█▀▀░█▀█░█▄█░█▀█░█▀█ ░█░█░█░░░█▀▀░█░█░█░█░█░█ ░▀░▀░▀▀▀░▀░░░▀░▀░▀▀▀░▀░▀
Hot reload for MCP servers.
Change code. Server restarts. Tools refresh. Context stays.
$ mcpmon --watch src/ -- python -m my_server
[mcpmon 14:32:01] Watching src/ for .py changes
[mcpmon 14:32:01 pid:48291] Started: python -m my_server
[mcpmon 14:32:15] File modified: tools.py
[mcpmon 14:32:15 pid:48291] Restarting...
[mcpmon 14:32:15 pid:48342] Restart #1 complete
[mcpmon 14:32:15] Sent tools/list_changed notification
FEATURES
HOT RELOAD
Watch files, restart server on change. SIGTERM graceful shutdown.
TOOL REFRESH
Sends notifications/tools/list_changed. Claude sees new tools instantly.
GATEWAY MODE
Aggregate multiple MCP servers. One connection, all tools.
DUAL RUNTIME
Python + Bun/TypeScript. Full feature parity. Your choice.
INSTALL
Python
pip install mcpmon
gateway + hot reload
Bun
bunx mcpmon
no install needed
Binary
download & run
no dependencies
MCP CONFIG
// .mcp.json - single server with hot reload { "mcpServers": { "my-server": { "command": "mcpmon", "args": ["--watch", "src/", "--", "python", "-m", "my_server"] } } }
// .mcp.json - gateway aggregates multiple servers { "mcpServers": { "gateway": { "command": "mcpmon", "args": ["--config", ".mcpmon.yaml"] } } } # .mcpmon.yaml servers: sage: command: sage-mcp watch: ~/.sage/src/ crucible: command: crucible-mcp watch: ~/crucible/src/
LOGGING LEVELS
--quiet
errors only
default
start/stop + PIDs
--verbose
+ file changes
--debug
+ everything