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.
MCP Proxy Tool is a command-line utility designed to forward Model Context Protocol (MCP) requests to HTTP, STDIO, or named pipe-based MCP servers. It serves as a versatile bridge, enabling seamless communication between different MCP transport protocols and ensuring compatibility across platforms.
Key Features:
Triple Transport Support: Connects to HTTP-based, STDIO-based, and named pipe-based MCP servers.
JSON-RPC 2.0 Compatibility: Fully supports the MCP protocol specifications for robust communication.
High Performance: Built in Rust with async/await for optimal speed and efficiency.
Configurable Timeouts: Adjustable settings for HTTP requests to suit specific needs.
Verbose Logging: Detailed logging options for debugging and monitoring.
Cross-Platform Operation: Supports Windows, macOS, and Linux (x86_64 and ARM64).
Audience & Benefit:
Ideal for developers and integrators working with MCP servers, this tool simplifies the process of connecting to different server types without rewriting client code. It enables seamless interaction between clients and diverse MCP implementations, enhancing flexibility and reducing integration complexity.
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
Installable via winget on Windows, MCP Proxy Tool is a powerful solution for bridging communication gaps in MCP-based systems.
macOS
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
}
}
}