mcp.vanshul.com
MCP serverWeb & browsingThis app lets your AI read any web page and get it back as clean Markdown it can work with. Once added, your AI can fetch pages, search the web, and pull out a page's metadata and links. Page requests are checked to keep fetching safe.
Available today. Use it from your connected AI after setup.
No other account needed.
Add the app, then give your AI a link and ask it to read the page, or ask it to search the web for a topic you need. The result comes back as clean Markdown your AI can work from.
Then ask your AI: use mcp.vanshul.com to fetch markdown
What your AI can do with it
- Read any web page as clean Markdown
- Search the web for pages
- Pull a page's metadata
- Extract the links from any page
- Fetch pages safely, with checks that block unsafe addresses
From the project's README
As published by vanshulgoyal101/mcp in README.md.
A public Model Context Protocol (MCP) server, running as a Cloudflare
Worker, that lets any AI agent read the live web as clean Markdown. It builds on
the same extraction pipeline as the sibling reader/ project
(Mozilla Readability + Turndown), exposed over the MCP Streamable HTTP
transport so agentic clients can plug straight in.
Endpoint
POST https://mcp.vanshul.com/mcp # JSON-RPC 2.0 (MCP)
GET https://mcp.vanshul.com/health # { ok: true, tools: [...] }
Tools
| Tool | Input | Returns |
|---|---|---|
fetch_markdown | { url, max_chars? } | The page's main content as clean Markdown (optionally truncated to max_chars) |
search_page | { url, query, max_matches?, context_chars? } | Only the passages matching query, each with its heading breadcrumb, ranked by relevance — token-efficient alternative to fetch_markdown |
fetch_metadata | { url } | JSON: title, byline, siteName, excerpt, wordCount |
extract_links | { url, limit? } | JSON: all outbound http(s) links + anchor text |
Connect from an MCP client
Remote/HTTP-capable clients (Claude Desktop, Cursor, Continue, …):
{
"mcpServers": {
"web-reader": { "url": "https://mcp.vanshul.com/mcp" }
}
}
Stdio-only clients can bridge with mcp-remote:
npx mcp-remote https://mcp.vanshul.com/mcp
Add it to your client
- Cursor — Settings → MCP → Add new server, or drop this into
~/.cursor/mcp.json:{ "mcpServers": { "web-reader": { "url": "https://mcp.vanshul.com/mcp" } } } - Claude Desktop — add the same block to
claude_desktop_config.json(Settings → Developer → Edit Config). If your version is stdio-only, use:{ "mcpServers": { "web-reader": { "command": "npx", "args": ["mcp-remote", "https://mcp.vanshul.com/mcp"] } } } - Continue / VS Code — add
web-readerwith URLhttps://mcp.vanshul.com/mcpto your MCP servers config.
Try it with curl
curl -s https://mcp.vanshul.com/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
curl -s https://mcp.vanshul.com/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"fetch_markdown","arguments":{"url":"https://example.com"}}}'
# Return only the passages matching a query (token-efficient):
curl -s https://mcp.vanshul.com/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call",
"params":{"name":"search_page","arguments":{"url":"https://example.com","query":"more information"}}}'
Layout
mcp/
├── src/
│ ├── worker.ts # entry: routes /mcp, /health, rate limit, CORS
│ ├── mcp.ts # JSON-RPC dispatch + tool definitions
│ ├── extract.ts # HTML -> Markdown / links (Readability + Turndown)
│ ├── search.ts # query-focused passage search over extracted Markdown
│ ├── fetcher.ts # fetch with timeout, size cap, re-validated redirects
│ └── security.ts # SSRF guard (block private/internal addresses)
├── public/
│ ├── index.html # landing page (served for non-API paths)
│ ├── og.png # social share image (1200×630)
│ ├── og.svg # social image source
│ ├── robots.txt
│ └── sitemap.xml
├── tests/ # vitest: security, extract, search, mcp dispatch, fetcher, worker
├── wrangler.toml
├── package.json
├── tsconfig.json
└── README.md
Develop & deploy
cd mcp
npm install
npm run typecheck
npm test # vitest — security, extraction, search, MCP dispatch, fetcher, worker
npm run dev # local worker at http://localhost:8787 (POST /mcp)
npm run deploy # wrangler deploy
After the first deploy, attach the custom domain mcp.vanshul.com in the
Cloudflare dashboard (Workers & Pages → this worker → Settings → Domains), or
uncomment the [[routes]] block in wrangler.toml.
Security
- SSRF-safe: only public
http(s)URLs; localhost, private ranges, cloud metadata and every redirect hop are blocked/re-validated. - Bounded: 10s fetch timeout, ~3 MB page cap, max 5 redirects, per-IP rate limit.
- Stateless & private: no page content is stored; extraction is deterministic with no LLM in the loop.
MCP protocol
Implements initialize, ping, tools/list, tools/call and notifications
(protocol version 2025-06-18). Tool failures are returned as
{ content, isError: true } so the agent can read the message and recover;
malformed requests use standard JSON-RPC error codes.
Documentation
- docs/architecture.md — modules, request lifecycle, extraction pipeline, limits
- docs/tools.md — full tool & JSON-RPC API reference with examples
- docs/security.md — SSRF threat model and mitigations
- docs/deployment.md — Cloudflare Worker + custom-domain deploy guide
License
MIT © Vanshul Goyal
Tools it offers (4)
What this server listed when ahel dialed its public endpoint in Sep 2026, with no key and no account of yours. The names are the server’s own.
fetch_markdownfetch_metadataextract_linkssearch_page
Signals
- GitHub stars
- 1
- Last commit
- Sep 2026
Advanced
- Delivery
- mcp MCP server → your ahel gateway (mcp.ahel.ai) → every connected AI client.
- Catalog kind
- mcp-server
- Gateway key
io-github-vanshulgoyal101-mcp- Source
- github.com/vanshulgoyal101/mcp
- Hosted endpoint
https://mcp.vanshul.com/mcp