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 HTTP Fetcher Serverfetch the latest Python release notes from python.org"
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.
MCP HTTP Fetcher Server
A Model Context Protocol (MCP) server that fetches web pages and converts them to Markdown format. This server supports both SSE (Server-Sent Events) and Stdio protocols, making it suitable for web deployments, Kubernetes environments, desktop clients, and sidecar patterns.
Features
✅ Dual Protocol Support: SSE (default) and Stdio protocols
✅ HTTP/HTTPS URL fetching: Download content from any web URL
✅ HTML to Markdown conversion: Clean conversion using html2text
✅ MCP Protocol compliance: Follows MCP server standards
✅ Kubernetes ready: SSE protocol with health checks and graceful scaling
✅ Sidecar friendly: Stdio protocol for process-to-process communication
✅ Error handling: Robust error handling for network issues
✅ Docker support: Ready-to-run Docker container
✅ Async operation: Non-blocking HTTP requests
✅ Modular architecture: Clean separation of concerns for maintainability
Quick Start
SSE Protocol (Default - Web/Kubernetes Deployments)
# Start with SSE protocol (default)
python app/server.py
# Custom host/port for Kubernetes
python app/server.py --protocol sse --host 0.0.0.0 --port 8000Stdio Protocol (Desktop Clients/Sidecars)
# Start with stdio protocol
python app/server.py --protocol stdioProtocol Overview
Protocol | Use Case | Deployment | Scaling |
SSE (Default) | Web apps, APIs, Kubernetes | HTTP server with endpoints | Horizontal scaling, load balancing |
Stdio | Desktop clients, sidecars | Process communication | Single client per process |
For detailed protocol documentation, see docs/PROTOCOLS.md.
Project Structure
The project follows Python best practices with a clean, modular architecture:
mcp_fetcher_http/
├── app/ # Main application package
│ ├── core/ # Core business logic
│ │ ├── fetcher.py # URL fetching functionality
│ │ └── converter.py # HTML to Markdown conversion
│ ├── protocols/ # Protocol implementations
│ │ ├── base.py # Abstract protocol interface
│ │ ├── stdio.py # Standard I/O protocol implementation
│ │ └── sse.py # Server-Sent Events protocol implementation
│ └── server.py # New modular server entry point
├── docs/ # Documentation
│ └── PROTOCOLS.md # Comprehensive protocol guide
├── tests/ # Test suite
│ ├── test_fetcher.py # Tests for URL fetching
│ ├── test_converter.py # Tests for HTML conversion
│ └── test_server.py # Integration tests
├── examples/ # Example usage and demos
│ ├── demo.py # Functionality demonstration
│ └── mcp_config_example.json
├── server.py # Backward-compatible entry point
├── requirements.txt # Python dependencies
└── Dockerfile # Container configurationEntry Points
python app/server.py- Primary entry point with full protocol supportpython server.py- Legacy entry point (limited protocol options)./run_server.sh- Convenience script with dependency management
Installation
Option 1: Direct Python Installation
Clone the repository:
git clone https://github.com/photonn/mcp_fetcher_http.git
cd mcp_fetcher_httpInstall dependencies:
pip install -r requirements.txtRun the server:
# SSE protocol (default - for web/Kubernetes deployments)
python app/server.py
# Stdio protocol (for desktop clients)
python app/server.py --protocol stdio
# Custom SSE configuration
python app/server.py --protocol sse --host 0.0.0.0 --port 8080
# OR use the convenience script:
./run_server.shOption 2: Docker Installation
Build the Docker image:
docker build -t mcp-fetcher-http .Run the container:
# SSE protocol (default)
docker run -p 8000:8000 mcp-fetcher-http
# Stdio protocol
docker run -it mcp-fetcher-http python app/server.py --protocol stdioNote: Docker build may require internet access to install Python packages. In restricted environments, use the direct Python installation method.
Usage
The server exposes a single MCP tool called fetch_url that accepts a URL parameter and returns the page content converted to Markdown.
MCP Client Configuration
For SSE Protocol (Web/Kubernetes deployments)
{
"mcpServers": {
"http-fetcher": {
"command": "curl",
"args": ["-N", "-H", "Accept: text/event-stream", "http://localhost:8000/sse"],
"description": "HTTP fetcher using SSE protocol"
}
}
}For Stdio Protocol (Desktop clients)
{
"mcpServers": {
"http-fetcher": {
"command": "python",
"args": ["/path/to/mcp_fetcher_http/app/server.py", "--protocol", "stdio"],
"description": "HTTP fetcher using stdio protocol"
}
}
}Command Line Options
python app/server.py --helpAvailable options:
--protocol {stdio,sse}- Communication protocol (default: sse)--host HOST- Host to bind SSE server (default: localhost)--port PORT- Port for SSE server (default: 8000)--endpoint ENDPOINT- SSE message endpoint (default: /messages)--server-name NAME- Server identifier--server-version VERSION- Server version
Tool Schema
{
"name": "fetch_url",
"description": "Fetch a web page and convert it to Markdown format",
"inputSchema": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The URL of the web page to fetch and convert to Markdown"
}
},
"required": ["url"]
}
}Example Usage
When connected to an MCP client, you can use the tool like this:
{
"name": "fetch_url",
"arguments": {
"url": "https://example.com"
}
}The server will return the page content converted to Markdown format.
Testing
Run the included test scripts to verify functionality:
# Run all tests (recommended)
python tests/test_server.py # Integration tests
python tests/test_fetcher.py # URL fetching tests
python tests/test_converter.py # HTML conversion tests
# Run demo to see HTML to Markdown conversion
python examples/demo.pyTesting the MCP Server
The server communicates via stdin/stdout using the MCP protocol. For basic testing:
Start the server:
python server.py(orpython app/server.py)The server will wait for MCP protocol messages on stdin
Send a list_tools request to see available tools
Send a call_tool request with the fetch_url tool
For easier testing, use an MCP client like Claude Desktop or develop a simple test client.
Configuration
The server includes the following configurable aspects:
Timeout: 30-second timeout for HTTP requests
Content types: Accepts HTML and XML content types
Markdown conversion: Preserves links and images in output
Error Handling
The server handles various error conditions:
Invalid URLs
Network connectivity issues
HTTP error responses (4xx, 5xx)
Content parsing errors
Timeout conditions
Security Considerations
The server validates URLs before processing
Runs in a non-root Docker container
Has reasonable timeout limits to prevent hanging
Does not execute or process JavaScript content
Dependencies
mcp>=1.0.0- Model Context Protocol server frameworkaiohttp>=3.9.0- Async HTTP client for fetching URLshtml2text>=2020.1.16- HTML to Markdown conversiontyping-extensions>=4.0.0- Type hints support
License
Licensed under the Apache License, Version 2.0. See the LICENSE file for details.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.