CrawlEngine MCP
CrawlEngine MCP fetches web pages and extracts clean Markdown, links, and metadata.
Scrape an HTTP/HTTPS URL into token-efficient semantic Markdown, with optional timeout and Markdown extraction controls.
Extract all navigable hyperlinks, anchors, and references from a page, optionally filtered to the same domain.
Retrieve page title, OpenGraph tags, meta descriptions, and canonical URLs.
Click on "Deploy 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., "@CrawlEngine MCPscrape https://news.ycombinator.com and give me the clean 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.
crawlengine-mcp
CrawlEngine MCP is a Model Context Protocol (2024-11-05) web extraction server built on httpx and beautifulsoup4 that converts HTML pages into clean Markdown, resolves relative links, extracts JSON-LD and HTML tables, and rotates browser headers and HTTP/SOCKS5 proxies.
Listed in TensorBlock/awesome-mcp-servers.
Why CrawlEngine MCP?
Context Window Efficiency: Strips
<script>,<style>,<nav>,<footer>, cookie banners, and ads before returning Markdown to the model.Resolved Canonical Links: Converts relative
<a href="/docs/start">paths into full URLs using the page'sbase_url.Outbound SSRF Protection: Blocks loopback, RFC1918 private networks, and cloud metadata (
169.254.169.254) on both initial requests and HTTP redirects.
Related MCP server: read-website-fast
Features
Semantic Markdown Extraction: Preserves headings, lists, code blocks, blockquotes, and resolved inline links without duplicating nested list paragraphs.
Browser Header Rotation: Rotates realistic Chrome, Firefox, and Safari
User-AgentandSec-Ch-Uaclient-hint headers.HTTP & SOCKS5 Proxy Pool: Round-robin rotation via
CRAWLENGINE_PROXIES(httpx[socks]) with automatic ejection after 3 consecutive failures.Structured Data & Metadata: Extracts
application/ld+jsonschemas, HTML<table>rows, OpenGraph tags, canonical URLs, and filtered internal/external links.
Quickstart
Run with uvx
uvx crawlengine-mcpClaude Desktop / Cursor Configuration
{
"mcpServers": {
"crawlengine-mcp": {
"command": "uvx",
"args": ["crawlengine-mcp"]
}
}
}CLI Usage
crawlengine-cli scrape https://example.com
crawlengine-cli links https://example.com --internal-only
crawlengine-cli meta https://example.comMCP Tools Available
Tool | Parameters | Description |
|
| Fetch an HTTP(S) page and convert its main content into Markdown |
|
| Parse |
|
| Return deduplicated absolute hyperlinks with anchor text |
|
| Extract page title, meta description, OpenGraph tags, and canonical URL |
| (none) | Inspect total, healthy, and ejected proxy counts in |
Genesis MCP Ecosystem
Module | Description | Repository |
CrawlEngine MCP | HTTP web extraction to clean Markdown, JSON-LD parsing, and proxy rotation | |
BrowserBridge MCP | Lightweight HTTP/DOM session automation with SHA-256 action receipts | |
PgSafe MCP | Read-only PostgreSQL/SQLite query guard, PII masking, and dry-run mutations | |
OmniBridge MCP | Multi-channel notification bus with SQLite retry queue | |
SysFlow MCP | Linux systemd inspection, confined log tailing, and port auditing | |
FastMCP Forge | Zero-dependency FastMCP framework, CLI scaffolder, and SSE middleware |
Support
If you find this project useful, you can support maintenance on Ko-fi.
License
MIT (c) 2026 Johann Schiffer
Available Tools
3 toolsextract_linksC
Extract all navigable hyperlinks, anchors, and references from a web page.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Target web page URL | |
| internal_only | No | Filter links to only those belonging to the same domain (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, yet it says nothing about network fetching, timeouts, rate limits, error behavior for unreachable pages, or whether JS-rendered links are captured. It only implies a read-only scrape, which is a significant disclosure gap for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is efficient, though its brevity contributes to the gaps in usage and behavioral detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should explain the shape of the result (e.g., a list of link objects with absolute URLs, anchor text, and possibly internal/external flags) and how failures are surfaced. It covers purpose only, which is adequate but incomplete for a fetch-dependent tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'url' and 'internal_only' fully documented in the schema, so the baseline of 3 applies. The description adds no extra semantics such as URL format expectations or what 'same domain' means for subdomains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs the specific verb 'extract' with a concrete resource: navigable hyperlinks, anchors, and references from a web page. It is clear what the tool returns, though it never distinguishes itself from sibling tools like scrape_url or extract_metadata, leaving the agent to infer boundaries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus scrape_url or extract_metadata, and no stated preconditions. The agent must guess at the division of labor between the three siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_metadataB
Retrieve page title, OpenGraph tags, meta descriptions, and canonical links.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Target web page URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. "Retrieve" implies a read-only network fetch, but there is no disclosure of failure modes (non-HTML pages, blocked/403 responses, empty metadata), rate limits, or whether the page is actually downloaded. For a no-annotation tool this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence that front-loads the verb and lists the return payload without filler. It is appropriately sized, though it stops short of any routing or caveat content that would make the compactness maximally useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, enumerating the extracted fields effectively documents the return shape. What is missing is behavioral context (failure modes, page-type requirements), which matters given the absence of both annotations and an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage ("Target web page URL"), so the schema already fully documents it. The description adds no syntax, format, or constraint detail beyond what the schema states, which is the baseline-3 case for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ("Retrieve") and enumerates exactly which metadata artifacts are returned: page title, OpenGraph tags, meta descriptions, canonical links. This differentiates it from siblings like scrape_url and extract_links by scope, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool over scrape_url or extract_links, nor any stated preconditions (e.g., must be an HTML page, must be reachable). The agent is left to infer usage from the tool's name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrape_urlB
Scrape a web page with browser fingerprinting and convert its content into clean, token-efficient Markdown.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Target HTTP/HTTPS web page URL | |
| timeout | No | Request timeout in seconds (default: 15) | |
| extract_markdown | No | Convert HTML into semantic Markdown (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses 'browser fingerprinting' (implying anti-bot evasion) and the Markdown output form, but says nothing about what happens on blocked/failed requests, whether JavaScript is rendered, rate limits, or whether the scrape is subject to robots/permission constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the action and resource, and every clause earns its place by naming the distinguishing output behavior. No filler or repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description is the only source of behavioral information. It covers the core purpose adequately but omits failure modes, blocking behavior, and any indication of cost or latency, which matter for a scraper that relies on fingerprint evasion.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: url, timeout, and extract_markdown are all documented in the schema with types and defaults. The description adds no syntax or format detail beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Scrape a web page') and adds the output transformation ('convert its content into clean, token-efficient Markdown'), so the agent knows exactly what it produces. It does not explicitly contrast itself with the siblings extract_links and extract_metadata, which an agent would need to choose among for a given page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites, and no routing to alternatives. The siblings extract_links and extract_metadata are never referenced, so selection between the three tools is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v1.0.0- First observed
extract_links - First observed
extract_metadata - First observed
scrape_url
TDQS
Scored across 3 tools
Each tool targets a distinct page-extraction concern: full content as Markdown, hyperlinks, and metadata. An agent can choose unambiguously based on the desired output.
All names follow a verb_noun snake_case pattern (scrape_url, extract_links, extract_metadata). The two extract_* tools share a clear family, and the slight verb difference is semantically appropriate.
Three tools is a lean but reasonable surface for a page-level scraping utility, and each tool earns its place. However, for a server branded as a 'CrawlEngine,' the count feels slightly under-scoped for crawling workflows.
The set covers single-page content, links, and metadata, but no tool actually crawls a site, follows extracted links, or handles batches/sitemaps. This is a notable gap for a crawl engine, though an agent could chain extract_links and scrape_url manually.
Maintenance
Related MCP Connectors
Reliable web access for AI agents: smart HTTP, rotating proxies, and full-browser rendering.
Web scraping for AI agents. Converts URLs to clean, LLM-ready Markdown with anti-bot bypass.
Unblocking and fresh web data for agents: URL to Markdown, YouTube, Maps, Amazon, jobs. Pay per call
Web data for agents. Extract web pages, crawl websites, discover URLs, and search the web.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI agents to read web pages reliably, returning clean markdown content, hyperlinks, and metadata without navigation or ad noise.312 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents and LLM pipelines to fetch and crawl web pages, extract readable content, and convert it into clean Markdown with preserved links while minimizing token usage.MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to fetch and crawl web pages, strip noise, and convert content into clean Markdown with preserved links for token-efficient scraping and downstream processing.MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to fetch and crawl webpages, strip noise, and convert content into clean Markdown while preserving links for token-efficient scraping.MIT