Automatically rewrites Bitbucket URLs to their raw content versions to extract clean, readable text from code repositories.
Automatically rewrites GitHub and Gist URLs to their raw content versions to extract clean, readable text from code repositories.
Automatically rewrites GitLab URLs to their raw content versions to extract clean, readable text from code repositories.
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., "@superFetch MCP Serverfetch and clean the content from https://www.wired.com/story/ai-chip-wars/"
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.
Fetch URL MCP Server
Intelligent web content fetcher MCP server that converts HTML to clean, AI-readable Markdown
Overview
@j0hanz/fetch-url-mcp is an MCP server for fetching public web pages and converting them into cleaned Markdown. It exposes one read-only tool, one built-in help prompt, and one internal instructions resource. The default transport is stdio, and --http enables Streamable HTTP mode.
Key Features
fetch-urlreturns cleaned Markdown, metadata, redirect information, cache status, and structured output.The tool is explicitly annotated as read-only, idempotent, and open-world, with optional task support for large fetches.
GitHub, GitLab, and Bitbucket page URLs are normalized to raw-content endpoints when appropriate.
get-helpexposes the server instructions, andinternal://instructionsmakes the same guidance available as a resource.HTTP mode includes auth, host/origin validation, rate limiting, health checks, and OAuth protected-resource metadata routes.
Requirements
Node.js >=24 (from
package.json)Docker is optional if you want to run the published container image.
Quick Start
Use this standard MCP client configuration:
{
"mcpServers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}Client Configuration
Add to .vscode/mcp.json:
{
"servers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}Or install via CLI:
code --add-mcp '{"name":"fetch-url-mcp","command":"npx","args":["-y","@j0hanz/fetch-url-mcp@latest"]}'For more info, see VS Code MCP docs.
Add to .vscode/mcp.json:
{
"servers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}Or install via CLI:
code-insiders --add-mcp '{"name":"fetch-url-mcp","command":"npx","args":["-y","@j0hanz/fetch-url-mcp@latest"]}'For more info, see VS Code Insiders MCP docs.
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}For more info, see Cursor MCP docs.
Add to mcp.json (VS integrated):
{
"mcpServers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}For more info, see Visual Studio MCP docs.
Add to Goose extension registry:
{
"mcpServers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}For more info, see Goose MCP docs.
Add to LM Studio MCP config:
{
"mcpServers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}For more info, see LM Studio MCP docs.
Add to claude_desktop_config.json:
{
"mcpServers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}For more info, see Claude Desktop MCP docs.
Add to Claude Code CLI:
{
"mcpServers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}Or install via CLI:
claude mcp add fetch-url-mcp -- npx -y @j0hanz/fetch-url-mcp@latestFor more info, see Claude Code MCP docs.
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}For more info, see Windsurf MCP docs.
Add to Amp MCP config:
{
"mcpServers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}Or install via CLI:
amp mcp add fetch-url-mcp -- npx -y @j0hanz/fetch-url-mcp@latestFor more info, see Amp MCP docs.
Add to cline_mcp_settings.json:
{
"mcpServers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}For more info, see Cline MCP docs.
Add to ~/.codex/config.yaml or codex CLI:
{
"mcpServers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}For more info, see Codex CLI MCP docs.
Add to .vscode/mcp.json:
{
"servers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}For more info, see GitHub Copilot MCP docs.
Add to Warp MCP config:
{
"mcpServers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}For more info, see Warp MCP docs.
Add to .kiro/settings/mcp.json:
{
"mcpServers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}For more info, see Kiro MCP docs.
Add to ~/.gemini/settings.json:
{
"mcpServers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}For more info, see Gemini CLI MCP docs.
Add to ~/.config/zed/settings.json:
{
"context_servers": {
"fetch-url-mcp": {
"settings": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}
}For more info, see Zed MCP docs.
Add to VS Code settings.json:
Add to your VS Code
settings.jsonunderaugment.advanced.
{
"augment.advanced": {
"mcpServers": [
{
"id": "fetch-url-mcp",
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
]
}
}For more info, see Augment MCP docs.
Add to Roo Code MCP settings:
{
"mcpServers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}For more info, see Roo Code MCP docs.
Add to Kilo Code MCP settings:
{
"mcpServers": {
"fetch-url-mcp": {
"command": "npx",
"args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
}
}
}For more info, see Kilo Code MCP docs.
Use Cases
Fetch documentation pages, blog posts, or reference material into Markdown before sending them to an LLM.
Retrieve repository-hosted content from GitHub, GitLab, or Bitbucket and let the server rewrite page URLs to raw endpoints when possible.
Force a fresh fetch for time-sensitive pages with
forceRefresh, or preserve navigation and boilerplate withskipNoiseRemoval.Use MCP task mode for large pages or slower sites when the inline response would otherwise be truncated or delayed.
Architecture
[MCP Client]
-> stdio -> `dist/index.js` -> `startStdioServer()` -> `createMcpServer()`
-> HTTP -> `dist/index.js --http` -> `startHttpServer()` -> `/mcp`
`createMcpServer()`
-> registers tool: `fetch-url`
-> registers prompt: `get-help`
-> registers resource: `internal://instructions`
-> enables logging, resources notifications, prompts, and task handlers
HTTP request flow
-> host/origin validation
-> CORS handling
-> rate limiting
-> authentication
-> health / OAuth metadata / download route dispatch
-> MCP session gateway for `POST /mcp`, `GET /mcp`, `DELETE /mcp`
Tool execution flow
-> validate input with `fetchUrlInputSchema`
-> fetch via shared pipeline
-> transform HTML to Markdown
-> validate structured output with `fetchUrlOutputSchema`
-> return text content plus `structuredContent`Request Lifecycle
[Client] -- initialize {protocolVersion, capabilities} --> [Server]
[Server] -- {protocolVersion, capabilities, serverInfo} --> [Client]
[Client] -- notifications/initialized --> [Server]
[Client] -- tools/call {name, arguments} --> [Server]
[Server] -- {content: [{type, text}], isError?} --> [Client]MCP Surface
Tools
fetch-url
Fetch public webpages and convert HTML into AI-readable Markdown. The tool is read-only, does not execute page JavaScript, can bypass cache with forceRefresh, and supports task mode for larger or slower fetches.
Parameter | Type | Required | Description |
|
| yes | Target URL. Max 2048 chars. |
|
| no | Preserve navigation/footers (disable noise filtering). |
|
| no | Bypass cache and fetch fresh content. |
|
| no | Inline markdown limit (0-10485760, 0=unlimited). Lower of this or global limit applies. |
1. Client calls `fetch-url` with `url` and optional fetch flags.
2. `fetchUrlInputSchema` validates the payload.
3. `performSharedFetch()` downloads the page and applies cache policy.
4. `markdownTransform()` converts the response body into Markdown and metadata.
5. The result is assembled into `content` plus `structuredContent`.
6. `fetchUrlOutputSchema` validates the structured payload before it is returned.Resources
Resource | URI | MIME Type | Description |
|
| text/markdown | Guidance for using the Fetch URL MCP server. |
Prompts
Prompt | Arguments | Description |
| none | Return Fetch URL server instructions: workflows, cache usage, task mode, and error handling. |
MCP Capabilities
Capability | Status | Evidence |
logging | confirmed |
|
resources subscribe/listChanged | confirmed |
|
prompts | confirmed |
|
tasks | confirmed | Task capabilities are advertised and task handlers are registered during startup. |
progress notifications | confirmed | Tool execution reports progress through the task/progress helpers. |
Tool Annotations
Annotation | Detected | Evidence |
| yes | src/tools/fetch-url.ts:406 |
| yes | src/tools/fetch-url.ts:407 |
| yes | src/tools/fetch-url.ts:409 |
| yes | src/tools/fetch-url.ts:408 |
Structured Output
fetch-urlpublishes an explicitoutputSchemaand returnsstructuredContentwhen the output passes validation.
Configuration
Variable | Default | Applies To | Notes |
|
| HTTP mode | Bind address. Non-loopback bindings also require |
|
| HTTP mode | Listening port for |
|
| HTTP mode | Must be enabled to bind to a non-loopback interface. |
| unset | HTTP mode | Comma/space separated static bearer tokens. |
| unset | HTTP mode | Alternate static token source for header auth. |
| unset | HTTP mode | Enables OAuth mode when combined with the other OAuth URLs. |
| unset | HTTP mode | Optional explicit authorization endpoint. |
| unset | HTTP mode | Optional explicit token endpoint. |
| unset | HTTP mode | Required for OAuth token introspection. |
| empty | HTTP mode | Required scopes enforced after auth. |
| unset | HTTP mode | Optional introspection client ID. |
| unset | HTTP mode | Optional introspection client secret. |
| unset | HTTP mode | Enable HTTPS when set together with |
| unset | HTTP mode | TLS certificate path. |
| unset | HTTP mode | Optional custom CA bundle. |
|
| HTTP mode | Optional connection cap. |
| unset | HTTP mode | Optional Node server tuning. |
| unset | HTTP mode | Optional Node server tuning. |
| unset | HTTP mode | Optional keep-alive tuning. |
| unset | HTTP mode | Optional keep-alive tuning buffer. |
| unset | HTTP mode | Optional header count limit. |
|
| HTTP mode | Enables inbound private-network protections. |
|
| HTTP mode | Requires |
| empty | HTTP mode | Additional allowed |
|
| Fetching | Allows local/loopback fetch targets. |
|
| Fetching | Network fetch timeout in milliseconds. |
|
| Tool output |
|
|
| Caching | Enables in-memory fetch result caching. |
|
| Tasks | Total task capacity. |
|
| Tasks | Per-owner task cap, clamped to the total cap. |
|
| Tasks | Enables status notifications for tasks. |
|
| Transform workers | Cancellation acknowledgement timeout. |
|
| Transform workers | Worker execution mode. |
| unset | Transform workers | Optional worker memory limit. |
| unset | Transform workers | Optional worker memory limit. |
| unset | Transform workers | Optional worker memory limit. |
| unset | Transform workers | Optional worker stack size. |
| empty | Content cleanup | Extra noise-removal tokens. |
| empty | Content cleanup | Extra DOM selectors for noise removal. |
| system default | Content cleanup | Locale override for extraction heuristics. |
| built-in list | Markdown cleanup | Override heading keywords used by cleanup. |
|
| Fetching | Override outbound user agent string. |
|
| Logging |
|
|
| Logging |
|
HTTP Mode Endpoints
Method | Path | Auth | Purpose |
|
| no, unless | Basic health response, with optional diagnostics. |
|
| no | OAuth protected-resource metadata. |
|
| no | OAuth protected-resource metadata for the MCP endpoint. |
|
| yes | Session initialization and JSON-RPC requests. |
|
| yes | Session-bound server-to-client stream handling. |
|
| yes | Session shutdown. |
|
| yes | Download route used by HTTP-mode fetch results. |
Security
Control | Status | Notes |
Host and origin validation | implemented | HTTP requests are checked against an allowlist before dispatch. |
Authentication | implemented | HTTP mode supports static bearer tokens or OAuth introspection. |
Protocol version checks | implemented | Supported MCP protocol versions are validated on HTTP sessions. |
Rate limiting | implemented | Requests pass through the HTTP rate limiter before route dispatch. |
TLS | optional | HTTPS is enabled when both TLS key and certificate files are configured. |
Stdio logging safety | implemented | Server logs are written to stderr, not stdout. |
Development
Script | Command |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Build and Release
CI workflows detected: .github/workflows/docker-republish.yml, .github/workflows/release.yml
Docker build signal detected (
Dockerfilepresent).Publish/release script signal detected in
package.json.
Troubleshooting
For stdio mode, avoid writing logs to stdout; keep logs on stderr.
For HTTP mode, verify MCP protocol headers and endpoint routing.
Re-run discovery and fact extraction after surface changes to keep documentation aligned.
Credits
Dependency | Registry |
npm | |
npm | |
npm | |
npm | |
npm | |
npm |
Contributing and License
License: MIT
Contributions are welcome via pull requests.