Skip to main content

mcpmon

Hot reload for MCP servers. Like nodemon, but for MCP.

Features

  • Hot reload - Restart server on file changes
  • Tool refresh - Sends notifications/tools/list_changed so Claude Code sees new tools without session restart
  • Gateway mode - Aggregate multiple MCP servers behind one gateway
  • Dual implementation - Python and Bun/TypeScript with full feature parity

Install

# Python
pip install mcpmon

# Bun (no install needed)
bunx mcpmon

# npm
npm install -g mcpmon

# Or download binary from GitHub releases (no dependencies)

Usage

Single Server Mode

mcpmon --watch src/ -- python -m my_mcp_server

Gateway Mode (Multi-Server)

mcpmon --config .mcpmon.yaml
# .mcpmon.yaml
servers:
  sage:
    command: sage-mcp
    watch: ~/.sage/src/

  crucible:
    command: crucible-mcp
    watch: ~/crucible/src/

  my-server:
    command: python
    args: ["-m", "my_server"]
    watch: ./src/
    extensions: py,json

Gateway aggregates tools with prefixes: sage::recall, crucible::review, etc.

Options

Option Description
-c, --config <file> Config file for multi-server gateway mode
-w, --watch <dir> Directory to watch (default: .)
-e, --ext <exts> Extensions to watch, comma-separated (default: py)
-q, --quiet Only show errors
-v, --verbose Show file change details
--debug Show all debug output
-t, --timestamps Include timestamps in output
-l, --log-file <file> Also write logs to file

Logging Levels

--quiet       Only errors
(default)     Start, stop, restart events + PID
--verbose     + file change details
--debug       + everything

Examples

# Basic - watch current directory for .py changes
mcpmon -- python server.py

# Watch specific directory and extensions
mcpmon --watch src/ --ext py,json -- python -m myserver

# With timestamps and log file
mcpmon --timestamps --log-file mcpmon.log -- python server.py

# Gateway mode - multiple servers
mcpmon --config .mcpmon.yaml

Sample Output

[mcpmon 16:08:50] Watching src/ for .py changes
[mcpmon 16:08:50 pid:53307] Started: python -m my_server
[mcpmon 16:08:54] File modified: tools.py
[mcpmon 16:08:54 pid:53307] Restarting...
[mcpmon 16:08:54 pid:53411] Started: python -m my_server
[mcpmon 16:08:54 pid:53411] Restart #1 complete
[mcpmon 16:08:54] Sent tools/list_changed notification

MCP Config

Single Server

{
  "mcpServers": {
    "my-server": {
      "command": "mcpmon",
      "args": ["--watch", "src/", "--", "python", "-m", "my_server"]
    }
  }
}

Gateway (Multiple Servers)

{
  "mcpServers": {
    "gateway": {
      "command": "mcpmon",
      "args": ["--config", ".mcpmon.yaml"]
    }
  }
}

How It Works

Single Server Mode

  1. Starts your MCP server as a subprocess
  2. Watches specified directory for file changes
  3. On change: SIGTERM → wait 2s → SIGKILL → restart
  4. Sends notifications/tools/list_changed notification
  5. Claude Code refreshes tool cache automatically

Gateway Mode

  1. Reads config file, starts all backend servers
  2. Aggregates tools from all backends (prefixed: backend::tool)
  3. Routes tool calls to correct backend
  4. Watches each backend's files independently
  5. Hot-reloads individual backends on change
  6. Hot-adds/removes backends when config changes

Development

# Python
pip install -e ".[dev]"
pytest tests/ -v  # 42 tests

# Bun/TypeScript
bun test  # 16 tests

License

MIT

Release files for mcpmon 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mcpmon 1.0.1
File Size Uploaded
mcpmon-1.0.1.tar.gz 35.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mcpmon 1.0.1
File Interpreter ABI Platform
mcpmon-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 50.4 kB

Release files / mcpmon-1.0.1.tar.gz

Download URL mcpmon-1.0.1.tar.gz
Size 35.3 kB
Tags Source
SHA-256 checksum
How to use checksums
04cc9a2385ad649b8131c167e3a97034b808bba8b7e071be02deac604eda3f49
BLAKE2b-256 checksum
How to use checksums
97c98d523f3616df454b3d7512e904986320cdbc802de952c8134d838584a9da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 26, 2026.

Transparency log

Release files / mcpmon-1.0.1-py3-none-any.whl

Download URL mcpmon-1.0.1-py3-none-any.whl
Size 15.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2df593e301a89ede54b1ad3c047f0cef172cd7a79320aa24f21becc5db6f2e6b
BLAKE2b-256 checksum
How to use checksums
12c05e3f2ba8c26bb3c94eb6ecf6f937ff5e35717f0f89e1774fdc5cdbf52f06
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 26, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

1.0.0

2 release files

0.3.0

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page