A command-line proxy tool that forwards Model Context Protocol (MCP) requests to HTTP, STDIO, or named pipe-based MCP servers. Supports multiple transport modes and cross-platform operation. This Windows package provides the native Windows executable with proper permissions and path integration.
README
MCP Proxy Tool
A high-performance MCP (Model Context Protocol) proxy tool written in Rust that enables connections to HTTP-based, STDIO-based, and named pipe-based MCP servers. This tool acts as a bridge, converting between different MCP transport protocols and making MCP servers accessible through a unified interface.
Features
Triple Transport Support: Connect to HTTP, STDIO, and named pipe-based MCP servers
HTTP Transport: Proxy requests to remote HTTP-based MCP servers (like Microsoft Learn)
STDIO Transport: Launch and communicate with executable MCP servers over stdin/stdout
Named Pipe Transport: Connect to MCP servers over named pipes (Unix sockets + Windows named pipes)
JSON-RPC 2.0 Compatible: Full support for MCP protocol specifications
High Performance: Built in Rust with async/await for optimal performance
Configurable Timeouts: Adjustable timeout settings for HTTP requests
Verbose Logging: Optional detailed logging for debugging and monitoring
Cross-Platform: Supports Windows, macOS, and Linux (x86_64 and ARM64 architectures)
Installation
Package Managers (Recommended)
Cargo (Rust Package Manager)
cargo install mcp-proxy-tool
Windows
Chocolatey (under review - available soon)
choco install mcp-proxy-tool
Winget (coming soon)
winget install awakecoding.mcp-proxy-tool
macOS & Linux
Homebrew (coming soon)
brew tap awakecoding/tap
brew install mcp-proxy-tool
Download mcp-proxy-tool-macos-x64.zip (Intel) or mcp-proxy-tool-macos-arm64.zip (Apple Silicon)
Extract: unzip mcp-proxy-tool-*.zip
Move to PATH: sudo mv mcp-proxy-tool /usr/local/bin/
Linux
Download mcp-proxy-tool-linux-x64.zip (x86_64) or mcp-proxy-tool-linux-arm64.zip (ARM64)
Extract: unzip mcp-proxy-tool-*.zip
Move to PATH: sudo mv mcp-proxy-tool /usr/local/bin/
From Source
Prerequisites: Rust (latest stable version)
git clone https://github.com/awakecoding/mcp-proxy-tool.git
cd mcp-proxy-tool
cargo build --release
The compiled binary will be available at target/release/mcp-proxy-tool.
Usage
Command Line Options
Usage: mcp-proxy-tool [-u ] [-c ] [-a ] [-p ] [-t ] [-v]
Options:
-u, --url URL of the remote HTTP-based MCP server to proxy requests to
-c, --command command to execute for STDIO-based MCP server
-a, --args arguments for the STDIO-based MCP server command
-p, --pipe path to named pipe for named pipe-based MCP server
-t, --timeout timeout in seconds for HTTP requests (ignored for STDIO and named pipe)
-v, --verbose enable verbose logging
--help, help display usage information
HTTP Transport (Remote MCP Server)
Connect to a remote HTTP-based MCP server:
# Connect to Microsoft Learn MCP server
./target/release/mcp-proxy-tool -u https://learn.microsoft.com/api/mcp
# With verbose logging and custom timeout
./target/release/mcp-proxy-tool -u https://learn.microsoft.com/api/mcp -v -t 60
STDIO Transport (Local Executable)
Launch and connect to a local executable MCP server:
# Connect to a Python MCP server
./target/release/mcp-proxy-tool -c python3 -a mcp_server.py
# Connect to a Node.js MCP server with arguments
./target/release/mcp-proxy-tool -c node -a "server.js --config config.json"
# With verbose logging
./target/release/mcp-proxy-tool -c python3 -a mcp_server.py -v
Named Pipe Transport (Local Socket-based)
Connect to an MCP server over named pipes (cross-platform):
Unix/Linux/macOS:
# Connect to a Unix domain socket
./target/release/mcp-proxy-tool -p /tmp/mcp_server.sock
# Connect to a FIFO named pipe
./target/release/mcp-proxy-tool -p /var/run/mcp/server.pipe -v
Windows:
# Connect to a Windows named pipe (short form)
mcp-proxy-tool.exe -p mcp_server
# Connect to a Windows named pipe (full path)
mcp-proxy-tool.exe -p \\.\pipe\mcp_server -v
PowerShell Examples:
# List tools from Windows named pipe MCP server
'{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | .\mcp-proxy-tool.exe -p mcp_server
# Call tool with verbose logging
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"example","arguments":{"text":"Hello Windows!"}}}' | .\mcp-proxy-tool.exe -p \\.\pipe\mcp_server -v
Basic Usage
# Use default Microsoft Learn MCP server
echo '{"method": "tools/list", "params": {}}' | ./target/debug/mcp-proxy-tool
# Use custom MCP server with verbose logging
echo '{"method": "tools/list", "params": {}}' | ./target/debug/mcp-proxy-tool --url "https://your-server.com/mcp" --verbose
# Set custom timeout
./target/debug/mcp-proxy-tool --timeout 60 --verbose
# Search Microsoft Learn documentation
echo '{"method": "tools/call", "params": {"name": "microsoft_docs_search", "arguments": {"question": "Azure Functions"}}}' | ./target/debug/mcp-proxy-tool
MCP Protocol Communication Examples
HTTP Transport with Microsoft Learn
# Initialize connection
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' | ./target/release/mcp-proxy-tool -u https://learn.microsoft.com/api/mcp
# List available tools
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | ./target/release/mcp-proxy-tool -u https://learn.microsoft.com/api/mcp
# Call a tool
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"microsoft_docs_search","arguments":{"question":"How to use Azure Functions?"}}}' | ./target/release/mcp-proxy-tool -u https://learn.microsoft.com/api/mcp
STDIO Transport with Custom Server
# List tools from Python MCP server
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | ./target/release/mcp-proxy-tool -c python3 -a echo_server.py
# Call tool via STDIO transport
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"echo","arguments":{"text":"Hello STDIO!"}}}' | ./target/release/mcp-proxy-tool -c python3 -a echo_server.py
Named Pipe Transport with Socket Server
# List tools from named pipe MCP server
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | ./target/release/mcp-proxy-tool -p /tmp/mcp_server.sock
# Call tool via named pipe transport
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"pipe_echo","arguments":{"message":"Hello Named Pipe!"}}}' | ./target/release/mcp-proxy-tool -p /tmp/mcp_server.sock -v
Windows Named Pipe Support
Windows Named Pipe Paths
Windows named pipes use a different path format than Unix:
Short form: pipename (automatically converted to \\.\pipe\pipename)
Full form: \\.\pipe\pipename (explicit Windows named pipe path)
Windows Command Examples
Command Prompt:
REM List tools from Windows named pipe MCP server
echo {"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}} | mcp-proxy-tool.exe -p mcp_server
REM Call tool with full pipe path
echo {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"example","arguments":{"text":"Hello Windows!"}}} | mcp-proxy-tool.exe -p \\.\pipe\mcp_server -v
PowerShell:
# List tools from Windows named pipe MCP server
'{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | .\mcp-proxy-tool.exe -p mcp_server
# Call tool with verbose logging
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"example","arguments":{"text":"Hello Windows!"}}}' | .\mcp-proxy-tool.exe -p \\.\pipe\mcp_server -v
Creating a Windows Named Pipe MCP Server
Example Python server for Windows (requires pywin32):
# Start MCP Inspector and connect to your proxy
mcp-inspector
# Then in the web interface, add a server:
# - Command: /path/to/mcp-proxy-tool
# - Args: --url https://your-server.com/mcp --verbose
Sample Input/Output
List Tools Request (Microsoft Learn Docs MCP Server)
Input:
{
"method": "tools/list",
"params": {}
}
Output:
{
"request": {
"method": "tools/list",
"params": {}
},
"response": {
"id": 1,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"description": "Search official Microsoft/Azure documentation to find the most relevant and trustworthy content for a user's query. This tool returns up to 10 high-quality content chunks (each max 500 tokens), extracted from Microsoft Learn and other official sources. Each result includes the article title, URL, and a self-contained content excerpt optimized for fast retrieval and reasoning. Always use this tool to quickly ground your answers in accurate, first-party Microsoft/Azure knowledge.",
"inputSchema": {
"description": "Search official Microsoft/Azure documentation to find the most relevant and trustworthy content for a user's query. This tool returns up to 10 high-quality content chunks (each max 500 tokens), extracted from Microsoft Learn and other official sources. Each result includes the article title, URL, and a self-contained content excerpt optimized for fast retrieval and reasoning. Always use this tool to quickly ground your answers in accurate, first-party Microsoft/Azure knowledge.",
"properties": {
"question": {
"description": "a question or topic about Microsoft/Azure products, services, platforms, developer tools, frameworks, or APIs",
"type": "string"
}
},
"required": [
"question"
],
"title": "microsoft_docs_search",
"type": "object"
},
"name": "microsoft_docs_search"
}
]
}
}
}
{
"request": {
"method": "tools/call",
"params": {
"arguments": {
"question": "Azure CLI create container app"
},
"name": "microsoft_docs_search"
}
},
"response": {
"id": 1,
"jsonrpc": "2.0",
"result": {
"content": [
{
"text": "[{\"title\":\"az containerapp create\",\"content\":\"### Command\\naz containerapp create\\n\\n### Summary\\nCreate a container app.\\n\\n### Required Parameters\\n\\n--name -n\\nThe name of the Containerapp. A name must consist of lower case alphanumeric characters or '-', start with a letter, end with an alphanumeric character, cannot have '--', and must be less than 32 characters.\\n\\n--resource-group -g\\nName of resource group. You can configure the default group using `az configure --defaults group=`.\\n\\n### Optional Parameters\\n\\n--allow-insecure\\nAllow insecure connections for ingress traffic...\"},{\"title\":\"Use Azure Functions in Azure Container Apps (azure-cli)\",\"content\":\"# Use Azure Functions in Azure Container Apps (azure-cli)\\n## Create a Functions App\\nTo sign in to Azure from the CLI, run the following command and follow the prompts to complete the authentication process...\"},{\"title\":\"Tutorial: Deploy your first container app\",\"content\":\"# Tutorial: Deploy your first container app\\nThe Azure Container Apps service enables you to run microservices and containerized applications on a serverless platform...\"}]",
"type": "text"
}
],
"isError": false
}
}
}