v1.0.0
[GitHub]
░█▄█░█▀▀░█▀█░█▄█░█▀█░█▀█
░█░█░█░░░█▀▀░█░█░█░█░█░█
░▀░▀░▀▀▀░▀░░░▀░▀░▀▀▀░▀░▀

Dev tool for MCP servers.

Edit code → server restarts → tools refresh → no context loss.

$ 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

FILE WATCHING

Watch source files, auto-restart on change. No manual restarts.

TOOL REFRESH

Sends list_changed notification. Claude sees new tools without restart.

KEEP CONTEXT

Server restarts mid-session. Your conversation continues.

GATEWAY MODE

Aggregate multiple servers. Add/remove via config, no restart.

INSTALL

Python

pip install mcpmon

gateway + hot reload

Bun

bunx mcpmon

no install needed

Go

go install ...

single binary

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