Back to System Ops

Command Proxy

Proxy server for CLI commands that captures terminal output in a circular buffer, enabling remote execution, log retrieval, and process management for command-line applications like Expo development tools.

Last updated: 1/27/2026

README

# MCP Command Proxy

An MCP (Model Context Protocol) server that acts as a proxy for CLI commands, specifically designed for Expo development but adaptable for any command-line application.

## How to use in Cursor (Expo example)

1. Go to the directory of your Expo project
2. Run `npx mcp-command-proxy --prefix "ExpoServer" --command "expo start" --port 8383`
3. Go to Cursor settings -> MCP -> +Add new MCP server, like this:  
![add_mcp_server](guide/add_mcp.png)
4. Set the name to "ExpoServer", Type to "SSE", URL to `http://localhost:8383/sse`
5. Click "Save" and you should now be able to use the MCP server in Cursor. Like this:
![mcp_server_in_cursor](guide/result.png)

Recommended to use the `--port 8383` flag to avoid conflicts with other servers.
Also, you can add following instruction to .cursorrules file:
```
You can use MCP getRecentLogs tool to get the most recent logs from Expo server. And if needed, you can send key presses to the running process using sendKeyPress tool.
```


## Features

- **Command Proxying**: Run any CLI command through the MCP server
- **Log Collection**: Capture and store logs from running processes (configurable buffer size)
- **Key Press Forwarding**: Forward key presses from client to the running process
- **Transparent Experience**: The end user sees the command output exactly as if they ran it directly
- **Interactive Commands**: Works with interactive CLI tools like Expo
- **MCP Integration**: Built using the MCP SDK for easy integration with Claude and other MCP-enabled AI assistants

## How It Works

1. The server starts a specified command in a pseudo-terminal (PTY)
2. All stdout/stderr output is:
   - Streamed to the client in real-time
   - Stored in a circular buffer (configurable size, default 300 lines)
3. Key presses from the client are forwarded to the running process
4. The server provides tools to:
   - View collected logs
   - Send key presses to the process
   - Get the current state of the process

## Use Cases

- **Expo Development**: Run `expo start` and interact with it while collecting logs
- **Build Processes**: Monitor build processes and analyze logs
- **Long-running Services**: Monitor services and keep recent log history
- **Remote Command Execution**: Execute and monitor commands from remote clients

## Requirements

- Node.js 18+ 
- TypeScript
- pnpm (recommended) or npm

## Installation

```bash
# Install dependencies
pnpm install

# Build the project
pnpm build

# Run directly
pnpm start -- --prefix "MyServer" --command "expo start"

# Or install globally
pnpm install -g
mcp-command-proxy --prefix "MyServer" --command "expo start"
```

## Usage

### Basic Usage

```bash
# Using the CLI
mcp-command-proxy --prefix "ExpoServer" --command "expo start"

# Or programmatically
import { createServer } from 'mcp-command-proxy';

const server = await createServer({
  prefix: 'ExpoServer',
  command: 'expo start',
  bufferSize: 500,
  port: 8080
});

// To stop the server later
server.stop();
```

### Options

- `--prefix, -p`: Name/prefix for the server (default: "CommandProxy")
- `--command, -c`: Command to run (required)
- `--buffer-size, -b`: Number of log lines to keep in memory (default: 300)
- `--port`: Port for HTTP server (default: 8080)
- `--help, -h`: Show help

### MCP Integration

This server implements the following MCP tools:

1. `getRecentLogs`: Returns the most recent logs from the buffer
   - Parameters: 
     - `limit` (optional): Number of logs to return (default: 100)
     - `types` (optional): Types of logs to include (stdout, stderr, system) (default: all)

2. `sendKeyPress`: Sends a key press to the running process
   - Parameters:
     - `key`: Key to send (e.g. "enter", "a", "1", "space")

3. `getProcessStatus`: Returns the current status of the process
   - Parameters: None

## Examples

### Running Expo Start

```bash
mcp-command-proxy -p "ExpoServer" -c "expo start" -b 500
```

### Using with Claude

1. Configure Claude to connect to this MCP server (SSE endpoint: http://localhost:8080/sse)
2. Ask Claude to run Expo or other commands
3. Claude can analyze logs and help troubleshoot issues

## Development

```bash
# Clone the repository
git clone https://github.com/hormold/mcp-command-proxy.git
cd mcp-command-proxy

# Install dependencies
pnpm install

# Build the project
pnpm build

# Run in development mode
pnpm dev
```

## License

MIT 

Installation

Add this MCP to your configuration:

{
  "mcpServers": {
    "command-proxy": {
      // See GitHub repository for configuration
    }
  }
}

See the GitHub repository for full installation instructions.