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
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.json
file. - 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.
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:
Method 1: Using Docker Compose (Recommended)
The easiest way to run the proxy with predefined configuration:
Override Environment Variables
You can override the default transport without editing files:
Method 2: Using Docker Run
For more control over the container configuration:
Step 1: Build the Image
Step 2: Run the Container
Option A: Using environment variables directly
Option B: Using .env file with consistent PORT variable
Option C: Using --env-file
Container Management
Environment Variables
The following environment variables can be configured in the .env
file or passed directly:
TRANSPORT
: Transport protocol (sse
,http
,stdio
) - Default:sse
HOST
: Host to bind to - Default:0.0.0.0
PORT
: Port number for the service - Default:8000
TZ
: Timezone - Default:Etc/UTC
Quick Start Examples
Configuration
To configure the proxy, edit the servers.json
file. You can add, remove, or modify the MCP servers that you want to expose.
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)
Testing HTTP Transport (Port 8001)
Testing with Different Services
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-alpine
- Optimized: 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
servers.json
as a volume for easy configuration updates - Use Docker Compose for consistent deployment
- Monitor logs using
docker-compose logs -f
- Use 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 down
anddocker-compose up --build
to force a clean rebuild - Configuration errors: Check
servers.json
syntax and ensure all required fields are present
Monitoring
Check service health:
Contributing
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.
hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Tools
mcp proxy
- Features
- Requirements
- How to Run
- Configuration
- How to Test
- Production Deployment
- Troubleshooting
- Contributing
Related Resources
Related MCP Servers
- -securityAlicense-qualityA proxy service that connects MCP clients to remote MCP servers, allowing users to use server keys from MCP.so to access remote resources without running their own server.Last updated -4092TypeScriptMIT License
- -security-license-qualityProxy that aggregates multiple MCP servers and presents them as a unified interface, allowing clients to access resources from multiple servers transparently.Last updated -1TypeScript
- PythonMIT License
- JavaScriptMIT License