mcp-fetch
A minimal MCP (Model Context Protocol) stdio server that exposes a single tool: http_request.
It supports:
Any HTTP method (GET/POST/PUT/PATCH/DELETE/HEAD/OPTIONS/...)
Headers, query params, and multiple body types (json/form/text/base64 bytes)
Large responses via chunking with a
transfer_idcursorIn-process caching backed by on-disk files so agents can request more chunks later
Run (uvx)
From this directory:
This is an MCP stdio server: it typically does not print anything until an MCP client connects and sends requests. If you run it directly in a terminal, it should stay running and wait for stdin from an MCP host.
For interactive/manual testing, it will auto-run an HTTP server when stdin is a TTY:
Open:
http://127.0.0.1:8000/mcpOverride:
MCP_FETCH_TRANSPORT=stdio|http,MCP_FETCH_PORT=8000Or flags:
mcp-fetch --transport http --port 8000
Client config note
If you use uvx, you must include the provided command name at the end. This works:
Tool: http_request
Typical flow:
Call with
url(gets chunk 0 andtransfer_id)If you need more, call again with
transfer_idandoffset=next_offset
Notes:
This server allows private/internal network access by default (your requested behavior).
Only
http://andhttps://URLs are allowed.Use
headersfor request headers.
Tests
Run unit tests:
There is an integration-style test that attempts a real request to https://github.com/. If outbound network access is unavailable, it will be skipped.
Configuration (env)
MCP_FETCH_CACHE_DIR(default:./.mcp-fetch-cache)MCP_FETCH_TTL_SECONDS(default:1800)MCP_FETCH_MAX_CACHE_BYTES_TOTAL(default:536870912) (512 MiB)MCP_FETCH_MAX_SINGLE_TRANSFER_BYTES(default:209715200) (200 MiB)MCP_FETCH_WAIT_CHUNK_TIMEOUT_SECONDS(default:30)