Content
# MCP Dev Server Manager
A daemon that accepts requests from MCP clients to start dev servers, allocating unique ports to avoid collisions and shutting down idle connections after 120s of inactivity.
## Example
- User starts daemon
- User's first MCP client (eg coding CLI) requests to run a dev server
- Dev server is started on PORT 3010
- User's second MCP client (eg coding CLI) requests to run a dev server
- Dev server is started on PORT 3011
## Features
- **Run multiple dev servers in parallel**: useful if you want to use automated testing tools eg [Playwright](https://github.com/microsoft/playwright-mcp) or [Google Dev Tools MCP](https://developer.chrome.com/blog/chrome-devtools-mcp)
- **Avoid port collisions**: when working with websites, it's often necessary to specify different ports if you want to run multiple dev servers
- **Automatic port allocation** starting at 3010 with reuse
- **Log capture** with 512KB ring buffers per server
- **Auto-cleanup** of idle sessions after 120 seconds (configurable via `--idle-timeout`)
## Installation & Usage
**Requirements:** Node.js >= 18
The recommended way to use dev-manager-mcp is via `npx`:
### Quick Start
Make sure the daemon is running in a terminal somewhere:
```bash
npx -y dev-manager-mcp
```
Add this MCP config to your coding CLI:
```bash
{
"mcpServers": {
"dev-manager": {
"command": "npx",
"args": ["dev-manager-mcp", "stdio"]
}
}
}
```
Finally, ask your coding CLI to start a dev server. You should see it use the MCP server.
## MCP Tools
### `start`
Start a development server. Auto-generates a unique 4-character session key.
**Parameters:**
- `command` (string): Shell command to execute (e.g., "npm run dev", "python -m http.server 8080")
- `cwd` (optional string): Working directory for the command. When using STDIO transport, defaults to client's working directory.
**Returns:**
```json
{
"status": "started",
"port": 3010,
"session_key": "A3X9"
}
```
### `stop`
Stop a running development server session.
**Parameters:**
- `session_key` (string): Session identifier
**Returns:**
```json
{
"status": "stopped",
"session_key": "A3X9"
}
```
### `status`
Get status of one or all development server sessions.
**Parameters:**
- `session_key` (optional string): Specific session to query, or omit for all sessions
**Returns:**
```json
{
"sessions": [
{
"session_key": "B7K2",
"port": 3010,
"running": true
}
]
}
```
### `tail`
Get stdout/stderr logs for a development server session.
**Parameters:**
- `session_key` (string): Session identifier (e.g., "A3X9")
**Returns:**
```json
{
"session_key": "A3X9",
"stdout": "Server started on port 3010...",
"stderr": ""
}
```
## Architecture
### Modules
- **port_allocator.rs** - Sequential port allocation from 3010 with free list
- **log_buffer.rs** - Bounded 512KB ring buffer with Clone support
- **server_entry.rs** - Process wrapper with async log capture
- **manager.rs** - Shared state manager with auto-cleanup sweeper
- **service.rs** - MCP service with tool definitions
- **main.rs** - HTTP/SSE daemon server
### State Management
- Single `Arc<Manager>` shared across all client connections
- Each connection gets a fresh `DevManagerService` instance
- Mutex-protected HashMap for session storage
- Background sweeper runs every 5 seconds to clean up idle sessions (>120s by default)
### Session Keys
- Auto-generated 4-character uppercase alphanumeric codes (e.g., "A3X9", "K7M2")
- Guaranteed unique across active sessions
- 1,679,616 possible combinations (36^4)
### Port Allocation
- Starts at 3010 and increments sequentially
- Maintains free list for reused ports
- Probes availability with TcpListener before assignment
### Log Capture
- Each server spawns two async tasks for stdout/stderr
- Logs stored in bounded VecDeque with byte tracking
- Oldest entries evicted when 512KB limit reached
- Non-blocking reads with line buffering
## Testing Multi-Client Behavior
1. Start daemon: `npx -y dev-manager-mcp daemon`
2. Connect Client A and start a server session
3. Connect Client B and query status - should see Client A's session
4. Client B can stop Client A's session
5. All clients share the same session state
## Building from Source
If you prefer to build from source or need offline/advanced usage:
```bash
cargo build --release
```
The binary will be at `target/release/dev-manager-mcp`.
To use the built binary, replace `npx dev-manager-mcp` with `./target/release/dev-manager-mcp` in all examples above.
## License
MIT
Connection Info
You Might Also Like
markitdown
MarkItDown-MCP is a lightweight server for converting URIs to Markdown.
markitdown
Python tool for converting files and office documents to Markdown.
Filesystem
Node.js MCP Server for filesystem operations with dynamic access control.
Sequential Thinking
A structured MCP server for dynamic problem-solving and reflective thinking.
Fetch
Retrieve and process content from web pages by converting HTML into markdown format.
TrendRadar
TrendRadar: Your hotspot assistant for real news in just 30 seconds.