Skip to main content
Glama
ceeyang-ai
by ceeyang-ai

WebX MCP Server 🌐

Python License Stars MCP GitHub

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_clean_text

Fetch a URL and extract clean readable text (up to 50K chars)

extract_links

Extract all links with anchor text, optionally filtered by domain

extract_by_selector

Extract content by CSS selector (text, HTML, or attribute)

search_web

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
)
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 tools
extract_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)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
css_selectorYes
attributeNotext
timeoutNo
max_resultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
max_charsNo
timeoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
max_resultsNo
timeoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 4 tool updatesv0.1.0
    • First observedextract_by_selector
    • First observedextract_links
    • First observedfetch_clean_text
    • First observedsearch_web

TDQS

A4.1/5.0

Scored across 4 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

With 4 tools, the server is well-scoped for web scraping and search. Each tool earns its place without being excessive or insufficient.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP 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.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for web search and content extraction using DuckDuckGo or SearXNG, with Playwright-based fetching and LLM-powered data extraction.
    139
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    An 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.
    5
    8 npm
    1
    MIT