A Fetch MCP server built with the Dedalus MCP framework. Provides web content fetching capabilities, converting HTML to markdown for easier consumption by LLMs.
| Tool | Description |
|---|---|
fetch_url |
Fetch a URL and extract its contents as markdown |
check_robots_txt |
Check if a URL can be fetched according to robots.txt |
get_robots_txt_url |
Get the robots.txt URL for a website |
| Tool | Description |
|---|---|
smoke_ping |
Simple ping for testing MCP connection |
| Parameter | Type | Default | Description |
|---|---|---|---|
url |
string | required | URL to fetch |
max_length |
integer | 5000 | Maximum number of characters to return |
start_index |
integer | 0 | Start content from this character index |
raw |
boolean | false | Get raw content without markdown conversion |
ignore_robots_txt |
boolean | false | Ignore robots.txt restrictions |
proxy_url |
string | null | Proxy URL to use for requests |
- Python 3.10+
- uv package manager
- Dedalus API Key
- Clone the repository
git clone https://github.com/dedalus-labs/fetch-mcp.git
cd fetch-mcp- Install dependencies
uv sync- Configure environment variables
Create a .env file based on .env.example:
cp .env.example .envcd src
python main.pyThe server will start on port 8080.
import asyncio
import os
from dotenv import load_dotenv
from dedalus_labs import AsyncDedalus, DedalusRunner
load_dotenv()
async def main():
client = AsyncDedalus(
api_key=os.getenv("DEDALUS_API_KEY"),
base_url=os.getenv("DEDALUS_API_URL"),
as_base_url=os.getenv("DEDALUS_AS_URL"),
)
runner = DedalusRunner(client)
result = await runner.run(
input="Fetch the contents of https://example.com and summarize it.",
model="openai/gpt-5",
mcp_servers=["issac/fetch-mcp"],
)
print(result.output)
if __name__ == "__main__":
asyncio.run(main())Caution: This server can access local/internal IP addresses and may represent a security risk. Exercise caution when using this MCP server to ensure this does not expose any sensitive data.
MIT License - see LICENSE for details.