mcp-web-agent
This server provides token-efficient web browsing, scraping, and crawling tools for AI agents. It fetches content as clean markdown or JSON via CSS selectors, and only launches a real browser when JavaScript rendering is required.
Tools:
web_scrape: Fetch a URL and return clean markdown or structured JSON using CSS selectors; optionally force browser rendering withforceBrowser.web_check: Verify text or CSS selector presence/absence, or exact text match; returns pass/fail plus a short evidence snippet.web_diff: Monitor a page or subtree for changes; returnschanged: true/falseplus a snippet, useful for cheap polling.web_interact: Execute browser actions (click, fill, select, press, waitFor) and return an accessibility snapshot or optional screenshot; supports persistent sessions viasessionId.web_session_close: Delete persisted session data (cookies, storage) for a session.web_crawl: BFS-crawl from a seed URL with configurable depth/page limits, path include/exclude patterns, and same-host option; returns titles, links, and excerpts while caching full markdown.web_crawl_get_page: Retrieve full cached markdown for a page visited during a crawl.
Other features:
Economical operation via tiered fetching, markdown output, schema extraction, and boolean verification.
SSRF protection blocks requests to private/reserved IP ranges.
Respects robots.txt and per-host rate limiting by default, overridable per call.
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., "@mcp-web-agentScrape https://example.com and return the main article as markdown."
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.
webmesh-mcp
A token-economical web browsing, scraping, and crawling suite delivered as a standard MCP server. Any MCP-capable agent (Claude, Cursor, Cline, etc.) can use it as ordinary tools with no bespoke integration.
Why this is cheaper than a full browser loop
Strategy | Saving |
Tiered fetching — static HTTP first, browser only when HTML is thin | Skips Chromium entirely for the majority of pages |
Markdown output, not raw HTML — noise/nav/ads stripped server-side | 300 KB page → ~8 KB of clean markdown |
Schema extraction — field → CSS selector returns only the values you asked for | No markdown conversion, no LLM reasoning |
Boolean verification — |
|
ARIA snapshot over screenshot — | Image tokens only when you explicitly ask |
Persistent browser pool — one Chromium process per server lifetime | ~1-2 s launch cost paid once, not per call |
robots.txt + rate limiting — per-host queues and rule caching | Polite crawling without throttling your agent |
Related MCP server: krwl3r
Tools
Tool | What it does | Browser needed? |
| Fetch a URL → clean markdown or schema-based JSON | Only if JS-rendered |
| Assert text/element present or absent → | Only if JS-rendered |
| Has this page changed since last check? → | Only if JS-rendered |
| Click / fill / select / press / waitFor sequence → ARIA snapshot | Always |
| Delete persisted cookies for a | No |
| BFS crawl from a seed URL → titles, links, excerpts, cached markdown | Only if JS-rendered |
| Retrieve full markdown cached by a prior | No |
Installation
npm install -g webmesh-mcp
# or use directly with npx (no global install needed):
npx webmesh-mcpChromium (optional — only needed for JS-rendered pages)
webmesh-mcp uses playwright-core
and does not bundle a browser. You have three options:
A) Install Playwright's managed Chromium (simplest):
npx playwright install chromiumB) Use your system Chrome / Edge — set executablePath in your MCP config (see below).
C) Connect to a running browser — Playwright supports CDP attach; pass --cdp-endpoint
flags in args if you want to hook into an already-running instance.
Static pages (most blogs, docs, GitHub, npm, etc.) never trigger the browser path at all.
Connecting to your agent
Add to your MCP config (e.g. ~/.claude/claude_desktop_config.json, .cursor/mcp.json, etc.):
{
"mcpServers": {
"web-agent": {
"command": "npx",
"args": ["webmesh-mcp"]
}
}
}Or, if you prefer to run from source:
{
"mcpServers": {
"web-agent": {
"command": "npx",
"args": ["tsx", "/absolute/path/to/webmesh-mcp/src/index.ts"]
}
}
}Agent Skill Integration
This repository ships with a pre-configured Agent Skill in skills/web-agent/SKILL.md.
It provides AI coding assistants (Claude Code, Antigravity, Cursor, Windsurf, Gemini CLI, etc.) with a complete decision tree, trigger keywords, and parameter guidance for using webmesh-mcp tools token-efficiently.
How to use the skill in your project
Copy or symlink the skills/ folder into your AI assistant's skills directory:
Claude / Antigravity / Gemini CLI: Place in
.agents/skills/web-agent/SKILL.mdor~/.gemini/config/skills/web-agent/SKILL.mdCursor: Copy contents to
.cursor/rules/web-agent.mdcWindsurf: Copy contents to
.windsurfrules
Tool reference
web_scrape
Parameter | Type | Default | Description |
|
| — | Page to fetch |
|
|
| Output format |
|
| — |
|
|
| — | Scope extraction to a CSS subtree |
|
|
| Skip static tier, always use Chromium |
|
|
| Bypass |
web_check
Parameter | Type | Default | Description |
|
| — | Page to check |
| enum | — |
|
|
| — | Text or CSS selector |
|
| — | Scope text search to subtree |
|
|
| |
|
|
|
web_diff
Parameter | Type | Default | Description |
|
| — | Page to monitor |
|
| — | Scope watch to subtree (e.g. |
|
|
| |
|
|
|
Returns changed: null on the first call (nothing to compare against),
true/false on subsequent calls.
web_interact
Parameter | Type | Default | Description |
|
| — | Starting URL |
|
| — | Sequence of browser actions |
|
| — | Scope returned ARIA snapshot |
|
|
| Return base64 PNG (costs image tokens) |
|
| — | Persist cookies/storage across calls |
|
|
|
Action shape:
{ type: "click" | "fill" | "select" | "press" | "waitFor", selector?: string, value?: string, timeoutMs?: number }web_session_close
Parameter | Type | Description |
|
| Session to delete |
web_crawl
Parameter | Type | Default | Description |
|
| — | Seed URL |
|
|
| Max link depth (0 = seed only) |
|
|
| Hard cap on pages visited |
|
|
| Restrict to same hostname |
|
| — | Pathname globs URLs must match, e.g. |
|
| — | Pathname globs URLs must NOT match |
|
|
| Output verbosity |
|
|
|
Full markdown for every visited page is cached in SQLite for web_crawl_get_page.
web_crawl_get_page
Parameter | Type | Description |
|
| Previously crawled URL |
Environment variables
Variable | Default | Description |
|
| Root directory for cache DB and session files |
Both the SQLite watch/crawl cache (cache/watch.sqlite) and session state files
(sessions/) live under MCP_WEB_AGENT_DATA_DIR. Override it to control where
runtime data is stored.
Security
SSRF protection
All outbound fetches — static HTTP, browser navigation, and crawl link-following — are validated against a blocklist before any network connection is made. Requests to the following are rejected:
Loopback addresses (
127.x.x.x,::1,localhost)Private RFC-1918 ranges (
10.x,172.16–31.x,192.168.x)Link-local and cloud metadata addresses (
169.254.x.x, including the AWS/GCP/Azure instance metadata endpoint)Multicast and reserved ranges (
224.xand above)Non-HTTP/HTTPS schemes
This matters because web_crawl follows links automatically, and scraped page content can contain prompt-injection attempts that try to redirect the next fetch to an internal address. The guard is applied at every fetch entry point so ignoreRobots: true does not bypass it.
DNS rebinding caveat: The guard resolves hostnames and checks the returned IPs, but the actual TCP connection is made moments later by fetch/Playwright using their own DNS resolution. A determined attacker with control of a DNS record could exploit this window. This is the known residual risk; full mitigation requires IP pinning at the HTTP-client level and is a planned follow-up.
Architecture
index.ts (MCP server, stdio transport)
├── tools/scrape.ts — web_scrape
├── tools/check.ts — web_check
├── tools/diff.ts — web_diff
├── tools/interact.ts — web_interact
├── tools/crawl.ts — web_crawl
├── tools/crawlGetPage.ts — web_crawl_get_page
├── tieredFetch.ts — static HTTP → browser escalation
├── browserPool.ts — singleton Chromium process (playwright-core)
├── ssrfGuard.ts — SSRF protection (blocks private/reserved addresses)
├── extract.ts — HTML → clean markdown / plain text / schema JSON
├── hostGate.ts — robots.txt parser + per-host rate-limiting queue
├── sessions.ts — disk-backed storageState persistence
├── cache.ts — SQLite: watch hashes + crawled page markdown
└── constants.ts — shared USER_AGENT, DATA_DIRDevelopment
git clone https://github.com/creatorpiyush/webmesh-mcp
cd webmesh-mcp
npm install
npx playwright install chromium # optional, for browser-tier testing
npm run dev # run MCP server in dev mode (tsx, no compile step)
npm run demo -- https://example.com
npm test # run the full integration test suite
npm run typecheck # tsc --noEmit, no output files
npm run format # format code with prettier
npm run build # compile to dist/License
MIT — see LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that fetches web pages and extracts clean, AI-friendly Markdown content using Mozilla Readability. It provides secure web access for LLMs with built-in SSRF protection and automated content cleaning for improved context retrieval and summarization.165MIT
- Alicense-qualityDmaintenanceMCP server for web scraping and browser automation, enabling AI agents to extract clean, token-efficient content from web pages.1MIT
- Alicense-qualityCmaintenanceA secure web scraping MCP server for AI agents that fetches pages with token budgeting, robots.txt compliance, and injection warnings, providing parsed content like markdown, metadata, and structured data.MIT
- AlicenseAqualityAmaintenanceMCP server for mdbrowse that enables agents to fetch, search, and browse web pages as clean, token-efficient markdown with provenance, caching, and structured navigation.16MIT
Related MCP Connectors
Web tools for agents: fetch URL as markdown (free MCP) + x402 scrape, links, AI JSON, snapshot.
Read a URL as clean markdown, screenshot a website, url to PDF. Web access for agents, no signup.
Reliable web access for AI agents: smart HTTP, rotating proxies, and full-browser rendering.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/creatorpiyush/webmesh-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server