
Security News
Knip Hits 500 Releases with v5.62.0, Improving TypeScript Config Detection and Plugin Integrations
Knip hits 500 releases with v5.62.0, refining TypeScript config detection and updating plugins as monthly npm downloads approach 12M.
mcp-streamablehttp-client
Advanced tools
Streamable HTTP to stdio proxy client for MCP servers with OAuth support
A bridge client that enables local MCP (Model Context Protocol) clients like Claude Desktop to connect to remote MCP servers that use StreamableHTTP transport and require OAuth authentication.
The mcp-streamablehttp-client
acts as a protocol bridge, converting between:
This enables seamless integration of OAuth-protected MCP services with tools that only support stdio-based MCP servers.
pixi add --pypi mcp-streamablehttp-client
pip install mcp-streamablehttp-client
FROM python:3.11-slim
# Install the package
RUN pip install mcp-streamablehttp-client
# Set working directory
WORKDIR /app
# Copy .env file (if exists)
COPY .env* ./
# Run the client
CMD ["mcp-streamablehttp-client"]
services:
mcp-client:
image: mcp-streamablehttp-client:latest
build:
context: ./mcp-streamablehttp-client
environment:
- MCP_SERVER_URL=${MCP_SERVER_URL}
volumes:
- ./.env:/app/.env:ro
stdin_open: true
tty: true
# Build and run with docker-compose
docker-compose up -d
First, authenticate with your MCP server:
# Using just (recommended)
just auth
# Or directly
mcp-streamablehttp-client --token
This will guide you through the OAuth flow and save your credentials to .env
.
Verify your authentication:
just test-auth
Add to your claude_desktop_config.json
:
{
"mcpServers": {
"my-oauth-server": {
"command": "mcp-streamablehttp-client",
"env": {
"MCP_SERVER_URL": "https://mcp-fetch.yourdomain.com"
}
}
}
}
Run MCP tool commands:
# List available tools
just list-tools
# Execute a tool
just exec "fetch https://example.com"
just exec "echo message='Hello World'"
All configuration is done through environment variables in .env
:
Variable | Description | Required |
---|---|---|
MCP_SERVER_URL | Target MCP server URL | Yes |
MCP_CLIENT_ID | OAuth client ID | Auto-generated |
MCP_CLIENT_SECRET | OAuth client secret | Auto-generated |
MCP_CLIENT_ACCESS_TOKEN | Current access token | Auto-generated |
MCP_CLIENT_REFRESH_TOKEN | Refresh token | Auto-generated |
MCP_CLIENT_REGISTRATION_TOKEN | RFC 7592 management token | Auto-generated |
MCP_CLIENT_REGISTRATION_URI | RFC 7592 management endpoint | Auto-generated |
# Setup or refresh OAuth tokens
mcp-streamablehttp-client --token
# Test authentication status
mcp-streamablehttp-client --test-auth
# Clear all credentials
mcp-streamablehttp-client --reset-auth
# List available tools
mcp-streamablehttp-client --list-tools
# List available resources
mcp-streamablehttp-client --list-resources
# List available prompts
mcp-streamablehttp-client --list-prompts
# Execute a tool command
mcp-streamablehttp-client -c "tool_name arguments"
# Get client registration info
mcp-streamablehttp-client --get-client-info
# Update client registration
mcp-streamablehttp-client --update-client "client_name=New Name,contacts=admin@example.com"
# Delete client registration
mcp-streamablehttp-client --delete-client
# Send raw JSON-RPC request
mcp-streamablehttp-client --raw '{"jsonrpc": "2.0", "method": "tools/list", "id": 1}'
# Run as continuous proxy (for Claude Desktop)
mcp-streamablehttp-client
The client supports multiple argument formats for flexibility:
# JSON format (for complex arguments)
mcp-streamablehttp-client -c 'tool {"key": "value", "nested": {"foo": "bar"}}'
# Key=value format
mcp-streamablehttp-client -c 'tool key1=value1 key2=value2'
# Smart detection (URLs, paths, etc.)
mcp-streamablehttp-client -c 'fetch https://example.com'
mcp-streamablehttp-client -c 'read_file /path/to/file.txt'
# Simple string arguments
mcp-streamablehttp-client -c 'echo "Hello World"'
┌─────────────────────┐ stdio ┌──────────────────────┐ HTTP + OAuth ┌─────────────────┐
│ Claude Desktop │ ←------------→ │ mcp-streamablehttp- │ ←----------------→ │ Remote MCP │
│ (or other stdio │ JSON-RPC │ client │ StreamableHTTP │ Server │
│ MCP client) │ │ (Protocol Bridge) │ │ (OAuth Protected)│
└─────────────────────┘ └──────────────────────┘ └─────────────────┘
The client acts as a transparent bridge, handling:
.env
file# Run all tests
just test
# Run specific test
just test-auth
# Build Docker image
just build
# Rebuild with no cache
just rebuild
"No credentials found"
mcp-streamablehttp-client --token
to authenticate"Token expired"
--token
"OAuth server not found"
MCP_SERVER_URL
is correct"Permission denied"
Set environment variable for verbose logging:
export MCP_DEBUG=1
mcp-streamablehttp-client --test-auth
See the examples/
directory for:
claude_desktop_config.json
- Claude Desktop configurationcommand_examples.sh
- Common command patternsdemo.py
- Python integration exampletoken_example.md
- OAuth flow walkthrough[License information here]
[Contribution guidelines here]
FAQs
Streamable HTTP to stdio proxy client for MCP servers with OAuth support
We found that mcp-streamablehttp-client demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Knip hits 500 releases with v5.62.0, refining TypeScript config detection and updating plugins as monthly npm downloads approach 12M.
Security News
The EU Cyber Resilience Act is prompting compliance requests that open source maintainers may not be obligated or equipped to handle.
Security News
Crates.io adds Trusted Publishing support, enabling secure GitHub Actions-based crate releases without long-lived API tokens.