# mcpipe
[![npm version](https://img.shields.io/npm/v/mcpipe.svg)](https://www.npmjs.com/package/mcpipe)
[![total downloads](https://img.shields.io/npm/dt/mcpipe.svg)](https://www.npmjs.com/package/mcpipe)

A wrapper for stdio-based MCP servers that adds debugging, tool name prefixing, and environment management.

## Quick Start

```bash
# Debug MCP communication
npx mcpipe --debug your-mcp-server

# Avoid tool name conflicts 
npx mcpipe --name myserver your-mcp-server

# Load environment variables
npx mcpipe --env-file .env your-mcp-server

# Combine features
npx mcpipe --debug --name myserver --env-file .env your-mcp-server
```

## Usage in MCP Clients

Prefix your server command with mcpipe.

_Before_:
```json
{
  "my_server": {
    "command": "npx",
    "args": ["my-mcp-server", "--config", "path/to/config"]
  }
}
```

_After (with debugging and tool prefixing)_:
```json
{
  "my_server": {
    "command": "npx", 
    "args": ["mcpipe", "--debug", "--name", "myserver", "npx", "my-mcp-server", "--config", "path/to/config"]
  }
}
```

## Features

**Debug Logging (`--debug`)**
- View all JSON-RPC messages between client and server
- Monitor process lifecycle events
- See tool name transformations

**Tool Name Prefixing (`--name prefix`)**
- Run multiple instances of the same server
- Avoid tool name conflicts between different servers
- A tool that the server exposes under the name `foo` will be exposed to your client under the name `<prefix>_foo` instead

**Environment Loading (`--env-file path`)**
- Load variables from `.env` files
- Keep secrets out of MCP client config
- N.B. if you want only the environment loading without the other features, consider [envmcp](https://github.com/griffithsbs/envmcp)

## Options

- `--debug`, `-d`: Enable debug logging to stderr
- `--name <prefix>`, `-n <prefix>`: Add prefix to tool names  
- `--env-file <path>`, `-e <path>`: Load environment file

## Debug Output Example

```
[2024-01-15 10:30:01.125] [myserver_CLIENT→SERVER] {"jsonrpc":"2.0","method":"tools/list","id":1}
[2024-01-15 10:30:01.128] [myserver_SERVER→CLIENT] {"jsonrpc":"2.0","result":{"tools":[{"name":"fetch"}]},"id":1}
[2024-01-15 10:30:01.128] [myserver_TRANSFORM] Tool names prefixed with: myserver_
[2024-01-15 10:30:01.129] [myserver_SERVER→CLIENT] (Modified) {"jsonrpc":"2.0","result":{"tools":[{"name":"myserver_fetch"}]},"id":1}
```

## Environment File Format

```
KEY=value
ANOTHER_KEY=another value
# This is a comment
QUOTED_VALUE="value with spaces"
```

## License

MIT 
