agent-web-fetch
MCP server that fetches a URL and returns its content as markdown. Free, uncapped, no API key — for Claude Code, ZCode, and any MCP client.
Install / Use
claude mcp add ChHsiching -- npx -y github:ChHsiching/agent-web-fetchIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
Content & MediaSupported Platforms
Our assessment of agent-web-fetch
agent-web-fetch scores 81/100 on our quality scale, 1022nd of 1,177 Content & Media skills we index.
Its MCP Server is 8.0 KB long, well organised into 13 sections with 6 code examples: a thorough specification that gives an agent plenty to work with.
It has 3 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 36 days ago, so agent-web-fetch is actively maintained.
- Our last check on 2026-09-16 found the source still online.
- It is released under AGPL-3.0, a copyleft license: you can use it, but modified versions you distribute must carry the same license.
- Its trust signals score 92/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful.
AI review by kimi-k2.7-code on 2026-09-25. Automated pattern scan on 2026-09-25. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
agent-web-fetch compared with similar skills
All 4 of these similar skills score higher than agent-web-fetch; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| agent-web-fetch (this skill)by ChHsiching | 81 | 3 | 36d ago | MCP Server |
| Agent-Reachby Panniantong | 100 | 97.0k | 5d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 75.2k | today | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.4k | today | CLAUDE.md |
| Scraplingby D4Vinci | 100 | 87.3k | today | MCP Server |
Frequently asked questions
- How do I install agent-web-fetch?
- Run
claude mcp add ChHsiching -- npx -y github:ChHsiching/agent-web-fetch. The install tabs above show the steps for each supported agent. - Which AI agents does agent-web-fetch work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is agent-web-fetch safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful. It is AGPL-3.0-licensed and scores 92/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is agent-web-fetch still maintained?
- The repository was last updated 36 days ago, so agent-web-fetch is actively maintained.
Skill content
View source on GitHubagent-web-fetch
English | 简体中文
A free, uncapped web reader for MCP-capable agents (Claude Code, ZCode, and any client that speaks the Model Context Protocol). It takes a URL the agent already holds and returns the page's main content as clean, model-friendly markdown — a drop-in replacement for the paid, rate-limited fetch tools built into many agent clients.
- Free and uncapped — runs on your machine over plain HTTP. No API key, no quota, no monthly limit, no 429s.
- Reliable launch — ships as a single statically-linked binary. No
npx, no runtime to install, no network at startup. It connects the first time, every time. - Near-zero maintenance — static HTTP fetch + the Readability extraction algorithm (the same engine Firefox Reader View uses). No headless browser treadmill, no anti-detection arms race to keep up with.
What it does
Give it a URL, get back the page's main article as markdown:
fetch({ "url": "https://example.com" })
→ "# Example Domain\n\nThis domain is for use in documentation examples..."
It runs Readability-style extraction to isolate the main article and strip boilerplate (nav, footer, scripts). When a page has no clear main article (list pages, dashboards), it falls back to the full document so you never get empty output. Image URLs are preserved in the markdown.
Tool parameters
| Parameter | Required | Default | Description |
| --------------- | -------- | --------- | ---------------------------------------------------------------- |
| url | yes | — | The URL to fetch. Must be an absolute http/https URL. |
| timeout | no | 30s | Per-request timeout, as a Go duration string (e.g. 45s). |
| return_format | no | markdown| markdown or text. |
| no_cache | no | false | Bypass the in-memory cache and force a fresh fetch. |
What it does not do
- No web search / discovery — it fetches URLs you give it; it doesn't find pages.
- No JavaScript rendering — pages that need JS to produce content return sparse results. (This is a deliberate v1 trade-off for near-zero maintenance.)
- No summarization / translation / image description — it returns content, it doesn't process it. No paid model calls.
- No authenticated content — it fetches anonymously; login-walled pages are out of scope.
Install
1. Download the binary for your platform
Grab the right file from the latest release:
| Platform | File |
| ----------------- | ------------------------------------- |
| Windows | agent-web-fetch-windows-amd64.exe |
| macOS (Apple Silicon) | agent-web-fetch-darwin-arm64 |
| macOS (Intel) | agent-web-fetch-darwin-amd64 |
| Linux | agent-web-fetch-linux-amd64 |
No installer, no runtime to install (no Node, Python, or Go required).
Where to put the file: a recommended per-user location exists on each platform — it needs no admin rights and is the conventional spot for user-installed programs:
| Platform | Recommended location |
| -------- | -------------------- |
| Windows | %LOCALAPPDATA%\Programs\agent-web-fetch\agent-web-fetch.exe |
| macOS / Linux | ~/.local/bin/agent-web-fetch |
That said, MCP doesn't actually care where the file lives — it launches the
binary via the absolute path in your config, so you can put it anywhere you have
read/execute permission (no need to add it to PATH). Just don't drop it into
other users' directories or system folders that need admin rights. The examples
below use the recommended locations; replace the path if you put it elsewhere.
2. Register it with your MCP client
This is a standard stdio MCP server: it has no arguments and no environment
requirements. In every MCP client the config entry is the same idea — point
command at the binary's absolute path, leave args empty:
"chhsich-web-fetch": {
"type": "stdio",
"command": "/absolute/path/to/agent-web-fetch",
"args": []
}
What differs between clients is only where this entry goes and the exact key names. Concrete examples for the common ones:
ZCode — add the entry to its MCP servers config (a flat object keyed by server name, no outer wrapper):
{
"chhsich-web-fetch": {
"type": "stdio",
"command": "C:/Users/<username>/AppData/Local/Programs/agent-web-fetch/agent-web-fetch.exe",
"args": []
}
}
Claude Code — ~/.claude.json (or %USERPROFILE%\.claude.json on Windows),
where servers live under a mcpServers key:
{
"mcpServers": {
"chhsich-web-fetch": {
"type": "stdio",
"command": "C:/Users/<username>/AppData/Local/Programs/agent-web-fetch/agent-web-fetch.exe",
"args": []
}
}
}
Or via the CLI (does the same thing): claude mcp add chhsich-web-fetch "C:/Users/<username>/AppData/Local/Programs/agent-web-fetch/agent-web-fetch.exe"
Any other stdio MCP client — find where it keeps its MCP server list (a
JSON/YAML config, a settings UI, etc.) and add one entry: type stdio,
command = absolute path to the binary, args = []. That's the whole
contract — there are no other parameters to set.
Replace the path: the examples above use the recommended install location with
<username>as a placeholder — swap in your actual username (or use%LOCALAPPDATA%if your client expands env vars). Adjust the path if you put the binary somewhere else.
Naming: the key (
chhsich-web-fetchabove) is your client-side label for the server — call it whatever you want. The tool it exposes is namedfetch, so the model callsfetch(...). Two servers exposing a tool both namedfetchdon't conflict as long as the server keys differ (the server name is the namespace).
Path tip (Windows): use the full absolute path including
.exe. Forward slashes work in JSON and avoid backslash escaping.
Windows SmartScreen note: the release binary is unsigned, so Windows may show a "Windows protected your PC" prompt the first time it runs. Click More info → Run anyway. This is expected for unsigned binaries and only happens once.
Restart your client after editing the config. The fetch tool now appears
alongside the built-in tools and the model can call it like any other.
3. Verify it works
After restarting your client, ask the model to fetch any public page, e.g.:
Use the fetch tool to read https://example.com
You should get back the page's content as markdown. If nothing comes back or
the tool is missing, set WEB_FETCH_LOG (below) and check the log file.
4. (Optional) Enable file logging
By default the server is silent (stdout is the MCP transport and must stay clean). To write diagnostics to a file for troubleshooting:
Set the WEB_FETCH_LOG environment variable to a file path. Logs append there
and never touch stdout.
Build from source
Requires Go 1.22+.
# Build all four platform binaries into dist/
./build.sh # any bash (Git Bash, WSL, Linux, macOS)
# or, on unix with make:
make release
Each binary is statically linked (CGO_ENABLED=0) with no external runtime
dependency. Run the test suite with go test ./....
How it works
URL → validate (http/https, absolute) → HTTP GET (realistic browser headers)
→ Readability extraction → markdown → in-memory cache (1h TTL)
↘ full-document fallback (never empty)
The fetch pipeline is a single deep module (internal/fetch), exposed over
stdio as one MCP tool (internal/mcpserver). Every failure (timeout, non-2xx,
bad content type, even a recovered panic) comes back as a structured error the
model can read — the server process never crashes.
See CONTEXT.md for the project glossary and docs/adr/ for the architectural
decisions (MCP + binary distribution, anonymous fetching, static extraction,
Go, launch reliability).
Related Skills
Agent-Reach
97.0kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
75.2kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
CowAgent
47.4kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Scrapling
87.3k🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
