MCP HTTP-to-STDIO Bridge
A Python bridge utility that enables Claude Desktop to connect to HTTP-based MCP (Model Context Protocol) servers via stdio transport.
Overview
Claude Desktop uses stdio (stdin/stdout) to communicate with MCP servers, but many MCP servers expose HTTP endpoints. This bridge translates between the two protocols, allowing Claude Desktop to use HTTP-based MCP servers.
Architecture:
Claude Desktop (stdio/JSON-RPC) ←→ mcp-http-to-stdio (bridge) ←→ HTTP MCP ServerFeatures
- ✅ Protocol Translation: Converts stdio JSON-RPC to HTTP POST requests
- ✅ Authentication: Supports custom header-based authentication
- ✅ Connection Pooling: Optimized HTTP connections with keep-alive and retry logic
- ✅ Error Handling: Comprehensive error responses for network, auth, and server errors
- ✅ Logging: File and stderr logging for debugging
- ✅ Performance: Tracks request timing and logs slow requests
Prerequisites
- Python 3.8+
- An HTTP-based MCP server to connect to
- Claude Desktop
Installation
From PyPI (Recommended)
pip install mcp-http-to-stdioThis installs the package globally and makes the mcp-http-to-stdio command available system-wide.
From Source
git clone https://github.com/your-org/agentic-enterprise.git
cd agentic-enterprise/packages/mcp-http-to-stdio
pip install -e .Configuration
Claude Desktop Config File Location
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Basic Configuration
{
"mcpServers": {
"my-http-mcp-server": {
"command": "mcp-http-to-stdio",
"args": [
"--url",
"http://localhost:8080/mcp"
],
"env": {
"AUTH_TOKEN": "your-auth-token-here"
}
}
}
}Remote Server Configuration
{
"mcpServers": {
"remote-mcp-server": {
"command": "mcp-http-to-stdio",
"args": [
"--url",
"https://mcp-server.example.com/mcp"
],
"env": {
"AUTH_TOKEN": "your-auth-token-here"
}
}
}
}Configuration with Timeout
{
"mcpServers": {
"my-http-mcp-server": {
"command": "mcp-http-to-stdio",
"args": [
"--url",
"http://localhost:8080/mcp",
"--timeout",
"600"
],
"env": {
"AUTH_TOKEN": "your-auth-token-here"
}
}
}
}Command Line Arguments
mcp-http-to-stdio --helpRequired Arguments
--url: HTTP MCP server endpoint URL (e.g.,http://localhost:8080/mcp)
Optional Arguments
--share-key: Authentication key (alternative to environment variable)--timeout: Request timeout in seconds (default: 300 = 5 minutes)
Authentication
Authentication tokens can be passed via:
- Environment variable (recommended): Set in the
envsection of Claude Desktop config - Command line argument: Use
--share-keyflag
The bridge adds the authentication token to the x-ally-share-key HTTP header when making requests to the MCP server.
Usage
- Install the bridge:
pip install mcp-http-to-stdio - Configure Claude Desktop with your HTTP MCP server URL
- Restart Claude Desktop to load the new MCP server
- Verify: Ask Claude "What MCP tools are available?"
Logging
Logs are written to two locations:
- Log file:
mcp_http_to_stdio.log(in the current directory) - stderr: Visible in Claude Desktop's developer console
View Logs
# Follow log file
tail -f mcp_http_to_stdio.log
# View Claude Desktop logs
# Enable developer mode in Claude Desktop settings
# Open developer console and look for MCP-related messagesTroubleshooting
"Connection refused" or "Failed to connect"
Cause: HTTP MCP server is not running or URL is incorrect
Solution:
- Verify the MCP server is running
- Check the URL in your configuration
- Test the endpoint with curl:
curl http://localhost:8080/mcp
"Authentication failed" or 401/403 errors
Cause: Authentication token is missing, incorrect, or expired
Solution:
- Verify the auth token is correct in the
envsection - Check if the token has expired
- Regenerate the token if necessary
Claude Desktop doesn't see the MCP server
Cause: Configuration file is malformed or in wrong location
Solution:
- Validate JSON syntax at https://jsonlint.com
- Verify file location matches your operating system
- Restart Claude Desktop after making changes
- Check Claude Desktop logs for MCP initialization errors
Slow response times
Cause: MCP server queries can take time, especially for complex operations
Expected behavior:
- Simple queries:
Content-Type: application/json
{"jsonrpc": "2.0", "method": "tools/list", "id": 1}
### Connection Pooling
The bridge uses optimized HTTP connection pooling:
- **Keep-alive**: Connections are reused
- **Retry logic**: Automatic retry on transient errors (429, 500-504)
- **Pool size**: 10 cached connections
- **Backoff**: Exponential backoff (1s, 2s, 4s)
## Example: MyAlly Share Server
This bridge was originally created for MyAlly's workspace sharing feature. Here's an example configuration:
{ "mcpServers": { "myally-workspace": { "command": "mcp-http-to-stdio", "args": [ "--url", "http://localhost:8081/share/mcp" ], "env": { "ALLY_SHARE_KEY": "ally_share_xxxxxxxxxxxxxxxx" } } } }
For MyAlly-specific documentation, see the [MyAlly repository](https://github.com/your-org/agentic-enterprise).
## Security Considerations
- **Protect authentication tokens**: Treat them like passwords
- **Use environment variables**: Don't hardcode tokens in config files
- **Use HTTPS**: For production deployments, always use HTTPS URLs
- **Rotate tokens**: Regularly regenerate authentication tokens
- **Don't commit tokens**: Never commit tokens to version control
## Contributing
Contributions are welcome! This is a simple bridge utility, but improvements to error handling, logging, or protocol support are always appreciated.
## License
MIT License - See LICENSE file for details
## Links
- **PyPI**: https://pypi.org/project/mcp-http-to-stdio/
- **GitHub**: https://github.com/your-org/agentic-enterprise
- **MCP Specification**: https://modelcontextprotocol.io/