A wrapper for stdio-based MCP servers that adds debugging, tool name prefixing, and environment management.
# 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
Prefix your server command with mcpipe.
Before:
{
"my_server": {
"command": "npx",
"args": ["my-mcp-server", "--config", "path/to/config"]
}
}
After (with debugging and tool prefixing):
{
"my_server": {
"command": "npx",
"args": ["mcpipe", "--debug", "--name", "myserver", "npx", "my-mcp-server", "--config", "path/to/config"]
}
}
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
--debug
,-d
: Enable debug logging to stderr--name <prefix>
,-n <prefix>
: Add prefix to tool names--env-file <path>
,-e <path>
: Load environment file
[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}
KEY=value
ANOTHER_KEY=another value
# This is a comment
QUOTED_VALUE="value with spaces"
MIT