This server (mcp-proxy) provides internet access to fetch web content via a fetch tool.
Fetch URLs: Retrieve content from any valid URL on the internet
Extract Markdown: Convert fetched HTML content into markdown format
Raw HTML Access: Retrieve the raw HTML content without simplification
Content Control: Specify maximum output length and starting character index, useful for managing large content and resuming truncated fetches
Displays coverage information in the project README via a Codecov badge integration
Provides container-based deployment options with instructions for extending the base image and running via Docker Compose
Provides a named server option to expose GitHub tools via MCP, using the @modelcontextprotocol/server-github package
Enables installation via PyPI package registry with download tracking
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-proxyswitch the transport to HTTP and restart the proxy"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
FastMCP Proxy Server
This project provides a simple and flexible proxy server built with FastMCP. It is designed to expose one or more underlying MCP (Model Context Protocol) servers over various transport protocols, making them accessible to a wider range of clients.
The server is containerized using Docker for easy and consistent deployment, optimized for production environments.
Features
Multiple Transports: Expose MCP servers over
stdio,sse(Server-Sent Events), orhttp.Flexible Configuration: Easily configure which MCP servers to proxy by editing the
servers.jsonfile.Lightweight & Fast: Built on the efficient FastMCP library and runs in a small Alpine Linux container.
Production Ready: Optimized Docker configuration for production deployment.
MCP Server Support: Supports both Node.js (
npx) and Python (uvx) based MCP servers.
Related MCP server: Atrax
Requirements
Docker and Docker Compose
How to Run
This project is designed for production deployment using Docker. You can run it using either Docker Compose or direct Docker commands:
Prerequisites
Clone the repository:
git clone https://github.com/sokunmin/mcp-proxy.git cd mcp-proxy
Method 1: Using Docker Compose (Recommended)
The easiest way to run the proxy with predefined configuration:
# Run with default settings (SSE transport, port 8000)
docker-compose up --build
# Run in background
docker-compose up -d --build
# Stop the service
docker-compose downOverride Environment Variables
You can override the default transport without editing files:
# Run with HTTP transport
TRANSPORT=http PORT=8001 docker-compose up
# Run with custom port
PORT=9000 docker-compose up
# Run with multiple overrides
TRANSPORT=http PORT=8080 docker-compose upMethod 2: Using Docker Run
For more control over the container configuration:
Step 1: Build the Image
docker build -t mcp-proxy .Step 2: Run the Container
Option A: Using environment variables directly
# SSE Transport (Default)
docker run -d --name mcp-proxy \
-p 8000:8000 \
-e TRANSPORT=sse \
-e HOST=0.0.0.0 \
-e PORT=8000 \
-e TZ=Etc/UTC \
mcp-proxy
# HTTP Transport
docker run -d --name mcp-proxy-http \
-p 8001:8001 \
-e TRANSPORT=http \
-e HOST=0.0.0.0 \
-e PORT=8001 \
-e TZ=Etc/UTC \
mcp-proxyOption B: Using .env file with consistent PORT variable
# Load environment variables from .env file
source .env
# Run with loaded variables
docker run -d --name mcp-proxy \
-p ${PORT}:${PORT} \
-e TRANSPORT=${TRANSPORT} \
-e HOST=${HOST} \
-e PORT=${PORT} \
-e TZ=${TZ} \
mcp-proxy
# For HTTP transport, override specific variables
TRANSPORT=http PORT=8001 docker run -d --name mcp-proxy-http \
-p ${PORT}:${PORT} \
-e TRANSPORT=${TRANSPORT} \
-e HOST=${HOST} \
-e PORT=${PORT} \
-e TZ=${TZ} \
mcp-proxyOption C: Using --env-file
# Use .env file directly
docker run -d --name mcp-proxy \
--env-file .env \
-p 8000:8000 \
mcp-proxy
# Override specific variables
docker run -d --name mcp-proxy-http \
--env-file .env \
-e TRANSPORT=http \
-e PORT=8001 \
-p 8001:8001 \
mcp-proxyContainer Management
# View logs
docker logs mcp-proxy
# Stop the container
docker stop mcp-proxy
# Remove the container
docker rm mcp-proxy
# View running containers
docker psEnvironment Variables
The following environment variables can be configured in the .env file or passed directly:
TRANSPORT: Transport protocol (sse,http,stdio) - Default:sseHOST: Host to bind to - Default:0.0.0.0PORT: Port number for the service - Default:8000TZ: Timezone - Default:Etc/UTC
Quick Start Examples
# Default SSE on port 8000
docker-compose up
# HTTP on port 8001
TRANSPORT=http PORT=8001 docker-compose up
# Custom port
PORT=9000 docker-compose up
# Run in background
docker-compose up -dConfiguration
To configure the proxy, edit the servers.json file. You can add, remove, or modify the MCP servers that you want to expose.
{
"mcpServers": {
"context7": {
"transport": "stdio",
"command": "npx",
"args": ["-y", "@upstash/context7-mcp"]
},
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"]
},
"time": {
"transport": "stdio",
"command": "uvx",
"args": ["mcp-server-time", "--local-timezone", "Etc/UTC"]
}
}
}The servers.json file is mounted as a volume, so changes take effect on container restart.
How to Test
You can test the running proxy using any MCP-compliant client or a tool like curl.
Testing SSE Transport (Port 8000)
# Test the SSE endpoint
curl http://localhost:8000/sse/
# Check server health
curl http://localhost:8000/Testing HTTP Transport (Port 8001)
# Test the HTTP endpoint
curl http://localhost:8001/
# Check server health
curl http://localhost:8001/Testing with Different Services
# Test SSE service
docker-compose up mcp-proxy-sse
curl http://localhost:8000/sse/
# Test HTTP service
docker-compose up mcp-proxy-http
curl http://localhost:8001/Testing MCP Servers
The proxy currently supports these MCP servers:
context7: Document search and context retrieval (Node.js via
npx)fetch: Web content fetching (Python via
uvx)time: Time and timezone operations (Python via
uvx)
All servers are automatically started by the proxy when needed.
Production Deployment
Docker Configuration Details
Base Image:
ghcr.io/astral-sh/uv:python3.12-alpineOptimized: Small size, production-ready
Security: Runs as non-root user
Environment: Configurable via environment variables
Best Practices
Use environment variables for configuration instead of modifying files
Mount for easy configuration updates
Use Docker Compose for consistent deployment
Monitor logs using
docker-compose logs -fUse health checks to ensure service availability
Scaling
For high-availability deployment, consider:
Using multiple replicas behind a load balancer
Implementing proper logging and monitoring
Using container orchestration (Kubernetes, Docker Swarm)
Troubleshooting
Common Issues
Port conflicts: Make sure ports 8000/8001 are not in use by other applications
Container build issues: Use
docker-compose downanddocker-compose up --buildto force a clean rebuildConfiguration errors: Check
servers.jsonsyntax and ensure all required fields are present
Monitoring
Check service health:
# View logs
docker-compose logs -f mcp-proxy-sse
# Check container status
docker-compose ps
# Access container shell (if needed)
docker-compose exec mcp-proxy-sse shContributing
Contributions are welcome! Please feel free to submit a pull request or open an issue to discuss any changes.
For development setup, please use the dev branch which includes development-optimized configurations.