webx-mcp-server
The server integrates DuckDuckGo search to enable web searching capabilities, allowing users to search the web and retrieve results via the DuckDuckGo HTML search engine.
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., "@webx-mcp-serverfetch clean text from https://en.wikipedia.org/wiki/Web_scraping"
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.
WebX MCP Server 🌐
A Model Context Protocol (MCP) server for web content extraction — fetch clean text, extract links, query by CSS selector, and search the web.
Built for AI agents. Works with Hermes Agent, Claude Code, Cursor, and any MCP-compatible client.
✨ Features
Tool | Description |
| Fetch a URL and extract clean readable text (up to 50K chars) |
| Extract all links with anchor text, optionally filtered by domain |
| Extract content by CSS selector (text, HTML, or attribute) |
| Search the web via DuckDuckGo HTML search |
Related MCP server: web-mcp-server
🚀 Quick Start
# Install from GitHub
pip install git+https://github.com/ceeyang-ai/webx-mcp-server.git
# Run as MCP server
webx-mcp-server🔌 Usage with AI Agents
Hermes Agent
Add to ~/.hermes/config.yaml:
mcp_servers:
webx:
command: "webx-mcp-server"Restart → use mcp_webx_fetch_clean_text, mcp_webx_extract_links, etc.
Claude Code / Cursor / Any MCP Client
Add to your MCP config:
{
"mcpServers": {
"webx": {
"command": "webx-mcp-server"
}
}
}📖 Examples
Fetch clean text
result = fetch_clean_text(
url="https://en.wikipedia.org/wiki/Web_scraping",
max_chars=5000
)Extract links
result = extract_links(
url="https://example.com",
filter_domain=True,
max_links=20
)Search the web
result = search_web(
query="latest AI research papers",
max_results=10
)🛠 Requirements
Python 3.10+
requests ≥ 2.28
beautifulsoup4 ≥ 4.11
lxml ≥ 4.9
mcp ≥ 1.0
👨💻 Development
git clone https://github.com/ceeyang-ai/webx-mcp-server.git
cd webx-mcp-server
pip install -e .
webx-mcp-server # Start MCP server📄 License
MIT — free for personal and commercial use.
Available Tools
4 toolsextract_by_selectorA
Extract content from a web page using CSS selectors.
Args: url: The URL to fetch css_selector: CSS selector (e.g. 'h1', '.article', '#main p') attribute: What to extract: 'text' (inner text), 'html' (inner HTML), or an attribute name like 'href', 'src', 'alt' timeout: Request timeout in seconds max_results: Maximum results to return (default 50, max 200)
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| css_selector | Yes | ||
| attribute | No | text | |
| timeout | No | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It explains parameters like timeout and max_results, but does not disclose potential failure modes, rate limiting, or nature of fetch operation. Return format is implied but not detailed, though output schema exists.
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?
Description is concise (5 lines), front-loaded with purpose, and lists arguments succinctly. No unnecessary words; every sentence adds value.
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?
Given 5 parameters and output schema exists, description covers all inputs adequately. Could mention return behavior on failure, but overall complete for the tool's complexity.
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 coverage is 0%, so description must compensate. It adds meaning to all 5 parameters: e.g., attribute options ('text', 'html', or attribute name), defaults for timeout and max_results. Provides enough context for correct usage.
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?
Clearly states it extracts content from a web page using CSS selectors. Verb and resource are specific. It distinguishes from siblings like extract_links and fetch_clean_text by focusing on CSS selector-based extraction.
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?
No explicit guidance on when to use this tool vs. siblings. The description does not mention alternatives or exclusion criteria, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_linksA
Extract all links from a web page.
Args: url: The URL to fetch filter_domain: If True, only return links to the same domain timeout: Request timeout in seconds max_links: Maximum links to return (default 50, max 200)
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| filter_domain | No | ||
| timeout | No | ||
| max_links | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must cover behavior. It only lists parameter defaults and a brief note on filter_domain, but omits critical behavioral details: error handling, redirects, how links are extracted (href vs. full URL), and what happens on failure.
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?
The description is a brief docstring with a one-line summary followed by an Args list. Every sentence serves a purpose, no redundant phrases. Front-loading the verb 'Extract' immediately conveys action.
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?
Given the tool has 4 parameters and an output schema, the description explains parameter mechanics well. However, it lacks usage context and behavioral details that would make it complete for an agent (e.g., what the output looks like, rate limits, or domain filtering logic). The output schema may cover return format, but in-tool guidance is minimal.
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?
The description adds significant value beyond the schema: filter_domain notes 'only return links to the same domain', timeout specifies 'in seconds', max_links mentions default (50) and max (200). Schema coverage is 0%, so these clarifications are essential.
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 clearly states 'Extract all links from a web page,' which is a specific verb + resource. It immediately distinguishes from siblings like extract_by_selector (CSS extraction) and search_web (search).
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?
The description provides no guidance on when to use this tool versus alternatives. For example, it doesn't mention that extract_by_selector might be preferred for specific CSS selections, or that fetch_clean_text is for text extraction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_clean_textA
Fetch a web page and extract clean readable text.
Args: url: The URL to fetch max_chars: Maximum characters to return (default 10000, max 50000) timeout: Request timeout in seconds (default 15)
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| max_chars | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses parameters and defaults (max_chars, timeout) but does not mention behavior like robots.txt handling, JavaScript execution, error handling, or the extraction algorithm. Some transparency but gaps remain.
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?
The description is extremely concise: a one-line summary followed by a bulleted list of args. No wasted words, front-loaded purpose, and easy to scan.
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 simple 3-parameter tool with an output schema, the description covers the core functionality and inputs. It does not describe the output format or edge cases, but the output schema can fill that gap. Minor completeness gap.
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 coverage is 0% (no descriptions in schema). The description adds meaningful explanations for each parameter: url, max_chars with default and max, timeout with default. This compensates for the lack of schema descriptions.
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 clearly states the tool fetches a web page and extracts clean readable text. It distinguishes itself from sibling tools like extract_by_selector (CSS selectors) and extract_links (link extraction) by specifying a general clean text extraction.
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?
The description implies use for extracting readable text from a URL but does not explicitly state when to use vs alternatives or provide any exclusions. There is no guidance on when to prefer extract_by_selector or other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_webA
Search the web using DuckDuckGo HTML search.
Args: query: Search query max_results: Number of results to return (default 5, max 20) timeout: Request timeout in seconds
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations; description mentions using DuckDuckGo HTML search and provides parameter defaults, but lacks details on rate limits, output format, or potential restrictions.
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?
Extremely concise, single-sentence purpose followed by parameter list; no redundancy.
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?
Covers the basics: purpose, parameters, defaults. Output schema exists to explain return values, so this is sufficient for a simple tool, though could mention the use of HTML search specificities.
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?
With 0% schema coverage, description adds meaningful parameter descriptions (defaults, max for max_results, timeout) beyond the schema's titles.
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?
Clearly states 'Search the web using DuckDuckGo HTML search,' with a specific verb and resource, distinguishing it from siblings like extract_by_selector.
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?
Implicitly suggests use for web searches, but no explicit when-to-use or alternatives compared to sibling tools.
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.
4 tool updates
v0.1.0- First observed
extract_by_selector - First observed
extract_links - First observed
fetch_clean_text - First observed
search_web
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: extract content via CSS selectors, extract links, fetch clean text, and search the web. No overlap in functionality.
All tool names follow a consistent verb_noun pattern (extract_by_selector, extract_links, fetch_clean_text, search_web), making them predictable and easy to understand.
With 4 tools, the server is well-scoped for web scraping and search. Each tool earns its place without being excessive or insufficient.
The tool set covers the core web scraping operations: search, fetching clean text, extracting links, and extracting via CSS selectors. Minor gaps like handling cookies or downloading files exist, but the essential features are present.
Maintenance
Related MCP Connectors
MCP server for web extraction and rendering via AceDataCloud WebExtrator
Free remote MCP server for fetching public web pages through a rotating proxy pool.
Docs: https://docs.keenable.ai/mcp-server Keenable is a free, remote MCP server that gives agents access to the web index. Search the web with ranked results and date/site filters, then fetch any indexed page as clean markdown. Works out of the box with no account or API key.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceThis MCP server provides tools for AI agents to search the web, fetch page content, and query specific elements from pages using DuckDuckGo.6 npm-
- FlicenseNot gradedqualityDmaintenanceMCP server that exposes web_search and web_fetch tools, allowing LLM applications to search the web via DuckDuckGo and fetch page content as cleaned markdown.-
- AlicenseNot gradedqualityCmaintenanceMCP server for web search and content extraction using DuckDuckGo or SearXNG, with Playwright-based fetching and LLM-powered data extraction.139MIT
- AlicenseAqualityBmaintenanceAn MCP server that fetches web pages and extracts clean, AI-usable context from them, enabling tools for link discovery, content search, and integrated fetch-and-search operations.58 npm1MIT