Skip to main content
Glama
huoshuiai42

huoshui-fetch

by huoshuiai42

huoshui-fetch

A dedicated web content fetching and conversion MCP (Model Context Protocol) server that provides tools for fetching, converting, and extracting data from web pages.

Features

Fetching Tools

  • fetch_url: Fetch content from URLs with customizable timeout, redirect handling, and user-agent

  • fetch_with_headers: Fetch URLs with custom headers for authenticated requests

Conversion Tools

  • html_to_markdown_tool: Convert HTML to clean Markdown format

  • html_to_text_tool: Extract plain text from HTML

  • clean_html_tool: Remove scripts/styles and sanitize HTML

  • json_to_markdown_tool: Convert JSON data to readable Markdown

Extraction Tools

  • extract_article_tool: Extract main article content using readability

  • extract_links_tool: Extract all links with filtering options

  • extract_metadata_tool: Extract page metadata (title, description, OG tags)

  • extract_images_tool: Extract images with size filtering

  • extract_structured_data_tool: Extract JSON-LD and microdata

Related MCP server: MCP Server Fetch Python

Installation

From MCP Registry (Recommended)

This server is available in the Model Context Protocol Registry. Install it using your MCP client.

mcp-name: io.github.huoshuiai42/huoshui-fetch

# Using uv (recommended)
uv sync

# Or install from GitHub
pip install git+https://github.com/yourusername/huoshui-fetch.git

Usage

# From the repository
uvx --from . huoshui-fetch

# From GitHub (once published)
uvx --from git+https://github.com/yourusername/huoshui-fetch.git huoshui-fetch

Run directly

# Using uv
uv run python -m huoshui_fetch

# Or if installed
python -m huoshui_fetch

The server communicates via standard input/output, making it perfect for integration with Claude Desktop and other MCP-compatible clients.

Configuration for Claude Desktop

Add to your Claude Desktop configuration:

{
  "mcpServers": {
    "huoshui-fetch": {
      "command": "uvx",
      "args": ["--no-cache", "--from", ".", "huoshui-fetch"],
      "cwd": "/path/to/huoshui-fetch"
    }
  }
}

Or if installed from GitHub:

{
  "mcpServers": {
    "huoshui-fetch": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/yourusername/huoshui-fetch.git",
        "huoshui-fetch"
      ]
    }
  }
}

Example Usage

Once configured, you can use the tools in Claude Desktop:

// Fetch a webpage
fetch_url("https://example.com")

// Convert HTML to Markdown
html_to_markdown_tool("<h1>Hello</h1><p>World</p>")

// Extract article content
extract_article_tool(html_content, "https://example.com/article")

Requirements

  • Python 3.11+

  • Dependencies listed in pyproject.toml

Development & Publishing

This project includes comprehensive automation for building and publishing to PyPI.

Automated Publishing Workflow

# Complete automated workflow (TestPyPI + PyPI)
uv run python scripts/publish.py --include-pypi

# TestPyPI only (recommended for testing)
uv run python scripts/publish.py

# Bump version and publish
uv run python scripts/publish.py --version-bump patch --include-pypi

Individual Commands

# Version management
uv run python scripts/version_manager.py --check
uv run python scripts/version_manager.py --bump patch

# Setup PyPI credentials (first time)
uv run python scripts/credentials_setup.py

# Build package
uv run python scripts/build.py

# Run comprehensive tests
uv run python scripts/test.py

# Upload to PyPI
uv run python scripts/upload.py

Features

  • Version Management: Automatic synchronization across all files

  • Quality Checks: Ruff linting and MyPy type checking

  • Build Automation: Clean builds with validation

  • Testing Suite: Comprehensive package and functionality tests

  • Publishing Workflow: TestPyPI → PyPI using uv publish (supports .pypirc files)

  • Error Recovery: Built-in error handling and recovery options

See PUBLISHING.md for detailed documentation.

DXT Extension

This project supports DXT (Desktop Extensions) format for easy distribution and installation.

To build the DXT extension:

python build_dxt.py

This will create a huoshui-fetch-{version}.dxt file that can be installed in compatible AI desktop applications.

License

MIT

Available Tools

11 tools
clean_html_toolA

Cleans HTML by removing scripts, styles, and optionally limiting to allowed tags.

Args: html: HTML content to clean allowed_tags: List of allowed tags (None = all tags except script/style)

Returns: Dictionary with cleaned HTML

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlYes
allowed_tagsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the core behavior (removing scripts/styles, optional allowed_tags filtering) and return type (dictionary). However, it does not disclose edge cases, attribute handling, or potential side effects beyond the stated transformations.

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 concise and well-structured: a one-sentence summary followed by Args and Returns sections. Every line provides necessary information, and the main verb-first structure makes it 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 two-parameter tool with an output schema, the description covers the essentials: behavior, parameters, and return type. It does not explain error handling or use cases relative to sibling tools, but given the output schema exists and the operation is straightforward, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It does add meaning: 'html' is described as the content to clean, and 'allowed_tags' clarifies that None means all tags except script/style. This is helpful but not deeply detailed; it lacks examples or constraints beyond what the schema types already show.

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 it cleans HTML by removing scripts and styles, and optionally limiting to allowed tags. This specific verb+resource+scope distinguishes it from sibling tools like html_to_text_tool or extract_article_tool.

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 usage context is implied through the description of what the tool does, but there is no explicit guidance on when to use this versus alternatives such as html_to_text_tool or extract_links_tool. No when-not or alternative comparisons are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_article_toolA

Extracts the main article content from a web page.

Args: html: HTML content url: Optional URL for resolving relative links

Returns: Dictionary with title, content, text_content, excerpt, and short_title

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo
htmlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/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 full responsibility. It explains the URL's role in resolving relative links and lists return fields, but does not discuss input requirements, error behavior, or limitations.

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 compact and well-structured: a one-sentence purpose, followed by clearly labeled Args and Returns. Every part earns its place without unnecessary detail.

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 two-parameter tool, the description covers core behavior, inputs, and output structure. It is largely complete, though a brief usage note relative to sibling extraction tools would fully round it out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds brief meaning for both parameters ('HTML content' and 'Optional URL for resolving relative links'). This is helpful but lacks depth, such as expected HTML format or the consequence of omitting the URL.

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 a specific action ('Extracts the main article content from a web page') with a defined resource, effectively distinguishing it from sibling tools like html_to_text_tool or extract_metadata_tool.

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 appropriate usage for article extraction but offers no explicit guidance on when to choose this tool over alternatives. Given the many sibling tools, a clearer differentiation would be helpful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_images_toolA

Extracts all images from HTML content.

Args: html: HTML content base_url: Base URL for resolving relative image URLs min_width: Minimum image width filter min_height: Minimum image height filter

Returns: Dictionary with list of images containing src, alt, title, dimensions, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlYes
base_urlNo
min_widthNo
min_heightNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full burden of behavioral disclosure. It does explain that it returns a dictionary with image details and mentions base_url resolution, which adds useful context. However, it does not disclose how edge cases are handled (e.g., invalid HTML, missing base_url, or the precise effect of min_width/min_height), leaving some behavioral ambiguity.

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 appropriately sized and front-loaded. It begins with the core function, then provides concise parameter explanations and a return summary. Every sentence contributes meaning, with no redundant or filler content.

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 the tool's moderate complexity and the presence of an output schema, the description covers the essential aspects: purpose, parameters, and return format. It is complete enough for an agent to understand and invoke the tool correctly. A small gap is the lack of sibling differentiation, but that is a usage-guideline concern more than completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so all parameter meaning must come from the description. It compensates thoroughly by explaining each parameter: html content, base_url for resolving relative URLs, and min_width/min_height as filters. This adds significant value beyond the raw schema types and clearly conveys the role of each argument.

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 opens with 'Extracts all images from HTML content,' which is a specific verb+resource statement. It clearly distinguishes this tool from siblings like extract_links_tool or extract_metadata_tool, which target other HTML aspects.

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?

The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention any alternative tools, prerequisites, or conditions that would help an agent decide between extract_images_tool and its siblings. The usage context is only implicitly inferred from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_metadata_toolA

Extracts metadata from HTML including title, description, and Open Graph tags.

Args: html: HTML content

Returns: Dictionary containing title, description, keywords, author, open_graph, twitter_card, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that the tool accepts HTML and returns a dictionary with metadata keys, but it lacks details on edge cases like malformed HTML or missing meta tags. This provides basic transparency but not comprehensive behavioral context.

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 concise and well-structured, with the purpose stated in the first sentence followed by separate args and returns sections. Every sentence serves a clear purpose, though the trailing 'etc.' is slightly vague.

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 one-parameter extraction tool, the description adequately covers input and output, especially since an output schema exists. It could be enhanced by explicitly noting that it does not fetch URLs (use fetch_url) or by listing more precise return keys, but it is complete enough for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The 'Args' section in the description describes the `html` parameter as 'HTML content,' adding meaning beyond the schema's bare type and title. However, it does not specify expected format (e.g., full document vs. fragment) or encoding, so the compensation for the 0% schema coverage is minimal.

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 that the tool 'Extracts metadata from HTML including title, description, and Open Graph tags,' specifying a precise verb and resource. This differentiates it from sibling tools like extract_article and extract_links, which handle other content types.

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 usage for metadata extraction but provides no explicit guidance on when to prefer this tool over alternatives. It does not mention exclusions or alternative tools, leaving the agent to infer the context from the tool's name and purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_structured_data_toolA

Extracts structured data (JSON-LD, microdata) from HTML.

Args: html: HTML content

Returns: Dictionary containing json_ld and microdata if found

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description clearly discloses the output format: 'Dictionary containing json_ld and microdata if found.' It also notes the conditional nature ('if found'), which is important. However, it does not mention edge cases like invalid HTML or empty results, though the return type partially covers this. With no annotations, this level of disclosure is decent.

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 and well-structured, with a front-loaded purpose statement followed by a compact Args/Returns format. Every sentence provides necessary information, and there is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one input parameter and an existing output schema, the description is complete. It states the input, the extraction targets, and the return structure. The context signal confirms an output schema, so the description does not need to detail return values further.

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?

The schema provides no description for the 'html' parameter (0% coverage), so the description must compensate. It states 'html: HTML content,' which clarifies that the input is raw HTML content rather than a URL or file path. This minimal explanation is sufficient for a single parameter and adds meaning beyond the schema's type-only definition.

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's function: 'Extracts structured data (JSON-LD, microdata) from HTML.' This specifies both the verb and the resource, and it distinguishes the tool from siblings such as extract_links_tool and extract_article_tool by focusing on structured data types.

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?

The description provides no guidance on when to use this tool versus the many sibling extraction tools. It neither mentions alternative tools nor gives explicit usage scenarios. The only implication is from the tool name and description, which is insufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_urlA

Fetches content from a URL.

Args: url: The URL to fetch timeout: Request timeout in seconds (default: 30) follow_redirects: Whether to follow redirects (default: True) user_agent: Custom user agent string (optional)

Returns: Dictionary containing status_code, content, headers, encoding, and error (if any)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
timeoutNo
user_agentNo
follow_redirectsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the behavior well by listing all parameters (timeout, follow_redirects, user_agent) and the return structure (status_code, content, headers, encoding, error). It does not go into deeper detail about network failure modes, but the presence of an 'error' field adds transparency.

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 well-structured: a one-line summary, an Args block with each parameter explained, and a Returns block. Every sentence adds value, and it is appropriately sized for the tool's complexity.

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 basic URL fetching tool with an output schema, the description is largely complete. It covers all parameters and the return value. It doesn't mention usage context relative to siblings or note any special behavior like redirect handling beyond the boolean parameter, but given the output schema and simple nature, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description is the sole source of parameter meaning. It explains each parameter beyond the schema's type/default: timeout is 'in seconds', user_agent is a 'custom user agent string (optional)', and follow_redirects is 'whether to follow redirects.' This fully 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Fetches content from a URL.' It is specific and unambiguous, but it does not explicitly differentiate from the sibling tool 'fetch_with_headers', so it lacks sibling distinction.

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?

The description provides no guidance on when to use this tool versus alternatives like 'fetch_with_headers'. It does not state whether to use it for simple fetches or when custom headers are needed. The intended usage is only implied through the basic action description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_with_headersA

Fetches a URL with custom headers.

Args: url: The URL to fetch headers: Dictionary of custom headers timeout: Request timeout in seconds (default: 30)

Returns: Dictionary containing status_code, content, headers, encoding, and error (if any)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
headersYes
timeoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It discloses the return dictionary structure (status_code, content, headers, encoding, error) and timeout default, but does not mention HTTP method, redirect handling, error behavior, or safety implications. This is moderate transparency, but lacks richer detail.

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 concise and well-structured, with a one-sentence purpose followed by clearly labeled Args and Returns sections. Every line adds value, no fluff, and the purpose is front-loaded.

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?

The description covers the tool's purpose, all parameters, and return values. It does not mention alternatives or edge cases, but given the tool's simplicity and the presence of an output schema (not shown), it is fairly complete. The lack of usage guidance is the main 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?

Given 0% schema description coverage, the description compensates by explaining each parameter's meaning: url, headers as a dictionary, and timeout with unit and default value It also clarifies the return structure. While not extremely detailed, it provides essential semantics beyond the bare schema 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?

The description clearly states a specific verb and resource: 'Fetches a URL with custom headers.' This distinguishes it from sibling tools like fetch_url by highlighting the custom headers feature. The purpose is unambiguous.

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 guidance is provided on when to use this tool versus alternatives such as fetch_url or other extraction tools. The description implies usage when custom headers are needed, but does not explicitly state when to choose this tool over siblings, nor does it mention any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

html_to_markdown_toolA

Converts HTML content to Markdown format.

Args: html: HTML content to convert strip_tags: List of tags to strip (default: ['script', 'style', 'meta', 'link']) heading_style: Style for headings - "ATX" or "SETEXT" (default: "ATX")

Returns: Dictionary with converted markdown content

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlYes
strip_tagsNo
heading_styleNoATX

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full burden of behavioral disclosure. It explains default stripping of tags and heading style, and indicates the return type. However, it does not explicitly state that this is a read-only, non-destructive operation or mention any potential side effects, authorization needs, or rate limits. For a conversion tool, this is a moderate level of transparency.

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 well-structured with a clear summary line followed by Args and Returns sections. It is concise, every sentence serves a purpose, and it avoids unnecessary elaboration. The format is easy to parse and front-loaded.

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 that an output schema exists, the description does not need to detail return structure. It covers purpose, parameter semantics, defaults, and the return type. It misses potential edge-case behaviors (e.g., handling of malformed HTML) but is otherwise complete for a conversion tool with this parameter set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides explicit explanations for all three parameters (html, strip_tags, heading_style) including defaults and allowed kinds (e.g., 'ATX' or 'SETEXT'). This fully compensates for the 0% schema description coverage and adds meaning beyond the raw schema field names.

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 starts with 'Converts HTML content to Markdown format', which is a specific verb+resource statement. This clearly distinguishes it from sibling tools like html_to_text_tool and clean_html_tool, as it targets a specific conversion target.

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 guidance is provided on when to use this tool versus alternatives. The description does not mention any exclusions, prerequisites, or preferred contexts. The existence of sibling tools like html_to_text_tool suggests potential ambiguity, but the description offers no direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

html_to_text_toolA

Extracts plain text from HTML content.

Args: html: HTML content to convert preserve_links: Whether to preserve link URLs in output (default: False)

Returns: Dictionary with extracted text

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlYes
preserve_linksNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It mentions the preserve_links parameter but does not disclose behavior such as handling of malformed HTML, script removal, whitespace preservation, or the structure of the returned dictionary beyond 'Dictionary with extracted text'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured with a one-line purpose, an Args section, and a Returns section. It contains no unnecessary text, though the Returns section is minimally informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool, the core functionality is clear, but it lacks usage context and finer details like the exact dictionary key name. Since an output schema exists, this is acceptable but still minimal for a complete picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema coverage, the description explicitly describes both parameters: 'html: HTML content to convert' and 'preserve_links: Whether to preserve link URLs in output (default: False)'. This fully explains the semantics beyond the schema's type and default.

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's function: 'Extracts plain text from HTML content.' This is a specific verb-resource-result combination that distinguishes it from siblings like html_to_markdown_tool and clean_html_tool.

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 guidance is provided about when to use this tool versus alternatives. The description does not mention that this is for plain text extraction as opposed to markdown conversion or structured data extraction, leaving the agent to infer usage from the name and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

json_to_markdown_toolA

Converts JSON data to readable Markdown format.

Args: json_data: JSON string to convert

Returns: Dictionary with markdown representation of the JSON

ParametersJSON Schema
NameRequiredDescriptionDefault
json_dataYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the burden. It does mention that the return value is a 'Dictionary', which is a behavioral trait, but it lacks details about error handling, edge cases (e.g., invalid JSON), or the exact structure of the markdown output.

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 compact, with a one-sentence summary followed by Args and Returns sections. Every element is informative and there is no fluff.

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 one-parameter tool with an output schema, the description provides the core purpose and parameter explanation. It lacks usage context and edge-case behavior, but the output schema likely covers return details, making the description sufficient.

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?

The schema has zero description coverage, but the tool description explicitly defines 'json_data' as 'JSON string to convert', clarifying the expected input format beyond the bare 'string' type. This adds useful semantic meaning, though it is concise.

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's function with the verb 'converts' and specifies the resource ('JSON data') and output format ('Markdown'). This distinguishes it from sibling tools that focus on fetching or HTML 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 usage is implied by the stated purpose: when JSON needs to be converted to Markdown, this tool is appropriate. However, there is no explicit guidance about when not to use it or mention of alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.8/5.0
Disambiguation4/5

The fetch tools fetch_url and fetch_with_headers are highly similar, differing only in the ability to pass custom headers, which could lead to confusion about which to use. The extraction and conversion tools are all clearly distinct in their outputs, so mis-selection is unlikely for those.

Naming Consistency3/5

Naming conventions are mixed: fetch_url and fetch_with_headers lack the '_tool' suffix that appears on all other tools, and there is no uniform prefix pattern. However, the 'extract_' and 'html_to_' groups are internally consistent, making the set readable overall.

Tool Count5/5

With 11 tools, the server is well-scoped for a web fetching and processing utility. Each tool serves a distinct purpose in the pipeline, and the count is neither excessive nor too sparse for the stated functionality.

Completeness4/5

The tool surface covers the complete workflow of fetching, cleaning, converting, and extracting content from web pages. Minor gaps exist, such as the lack of cookie/session handling or CSS selector-based extraction, but these are not essential to the core purpose.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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/huoshuiai42/huoshui-fetch'

If you have feedback or need assistance with the MCP directory API, please join our Discord server