Skip to main content
Glama
pietz
by pietz

MCP Web Tools

This package provides a powerful MCP server to equip LLMs with web access, going beyond naive methods of searching, fetching and extracting content.

Introduction

I created this package out of the frustration that most MCP servers enabling web access to LLMs, didn't perform as well as I hoped. Some of these shortcomings I wanted fix, include:

  • Good search results without requiring an API key

  • Sophisticated fetching for more complex JavaScript sites

  • Extracting content in nicely formatted Markdown

  • Support for extracting content from PDFs

  • Support for loading and displaying images

  • Capture rendered webpage screenshots for visual context

  • Usage options for advanced cases like loading raw HTML

Related MCP server: web-search-mcp

Installation

Claude Desktop

Claude Code

claude mcp add web-tools uvx mcp-web-tools

Or to also set the Brave Search API key:

claude mcp add web-tools uvx mcp-web-tools -e BRAVE_SEARCH_API_KEY=<key>

Provide a Perplexity Search API key to prioritize their fresh, citation-rich index:

claude mcp add web-tools uvx mcp-web-tools -e PERPLEXITY_API_KEY=<key>

You can mix both environment variables to fall back from Perplexity to Brave seamlessly.

Internals

The package is written in Python using powerful libraries and services under the hood to improve results.

Searching

We use the Perplexity Search API when a PERPLEXITY_API_KEY is configured. It delivers ranked snippets with citations from Perplexity's continuously refreshed index. If no Perplexity key is available, we fall back to the Brave Search API (via BRAVE_SEARCH_API_KEY), then a lightweight Google workaround, and finally DuckDuckGo. While we recommend adding at least one API key, the chained fallbacks continue working for most workloads.

Fetching

The fetching of web content is based on Zendriver, a fork of nodriver for next level webscraping and performance. It should stay undetected for most anti-bot solutions and fetch content even from complex JS-based sites.

Extracting

For web extraction, we use Trafilatura which consistently outperforms other alternatives for extracting content from HTML pages. For PDFs, we use PyMuPDF4LLM which similarly extracts content in an easy-to-read format for LLMs, with advanced layout support.

Screenshots

Rendered page previews are powered by Zendriver. The view_website tool navigates to a URL in a headless Chromium session and returns the resulting page as a PNG screenshot. By default only the current viewport is captured, but callers can request a full-page image by setting the full_page argument to true.

Contributing

While it's impossible to support all pages and layouts, we thrive to make this package better over time. For unsupported sites, problems, or feature requests open an issue.

CI, Releases, and Publishing

This repo includes a GitHub Actions workflow that:

  • Runs tests via uv on PRs and pushes to main.

  • On push to main, if project.version in pyproject.toml changed, it:

    • Builds distributions with uv build.

    • Creates a GitHub Release tagged v<version> with autogenerated notes.

    • Publishes the package to PyPI using uv publish.

  • Merge a PR that bumps project.version in pyproject.toml to trigger a release.

Rollback:

  • If a release was created erroneously, delete the GitHub Release and tag v<version>.

  • Yank the version on PyPI if needed.

Available Tools

3 tools
fetch_urlB

Universal content loader that fetches and processes content from any URL. Automatically detects content type (webpage, PDF, or image) based on URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe remote URL to load content from.
offsetNoCharacter/content offset to start from (for text content).
rawNoReturn raw content instead of cleaned Markdown when possible.
fetch_providerNoChoose the fetching backend. 'auto' tries lightweight fetchers before Zendriver.auto

TDQS

B3.2/5.0
Behavior3/5

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

The description indicates read behavior ('fetches') and content type auto-detection, but lacks details on safety (e.g., no explicit read-only declaration), error handling, rate limits, or side effects. Since annotations are absent, the description should cover more behavioral traits.

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?

Two sentences, highly concise, no redundant information. The core purpose is front-loaded in the first sentence.

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

Completeness2/5

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

The tool has no output schema, so the description should explain return values or behavior. It only says 'fetches and processes content' without specifying output format, pagination, or error scenarios. Incomplete for a context with 4 parameters and no output schema.

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 100% with clear parameter descriptions. The tool description adds minimal new meaning beyond the schema (e.g., 'auto-detects content type' is relevant to raw parameter but not explicit). Baseline 3 is appropriate.

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 'fetches and processes content from any URL' and mentions auto-detection of content types. However, it does not explicitly differentiate from siblings like search_web or view_website, which could also involve URL fetching.

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 on when to use this tool versus alternatives. The description labels it as 'universal' but does not specify contexts where search_web or view_website would be more appropriate.

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

search_webA
Execute a web search using the given search query.
Returns a list of results including title, URL, and a rich content snippet.
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesThe search query to use.
limitNoNumber of results (max 20).
offsetNoTo scroll through more results.

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 must carry the full burden. It discloses that results include title, URL, snippet, but does not mention any rate limits, authentication, or potential side effects. For a read-only web search, this is adequate but minimal.

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?

Two sentences with no redundancy. First sentence states purpose directly, second sentence describes output. Highly efficient.

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 no output schema, the description adequately describes return format. However, it could mention pagination behavior with offset explicitly, but schema provides that detail. Overall complete for a simple search tool.

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 has 100% description coverage. The description repeats the schema's parameter descriptions without adding new meaning. Baseline 3 is appropriate.

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 executes a web search and returns results with title, URL, and snippet. This distinguishes it from siblings fetch_url and view_website, which are for fetching content or viewing a website.

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 web search, but does not explicitly say when to use this tool instead of siblings. No guidance on when not to use or alternatives.

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

view_websiteA

Capture and return a rendered screenshot of a website. Helpful when not just the data but also the visuals are relevant.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe webpage URL to capture.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations provided. The description states basic behavior but lacks details on output format, page load handling, or permissions. Minimal 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?

Description is two succinct sentences, front-loaded with action and followed by context. No unnecessary words.

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 simple tool with one parameter and no output schema, the description covers purpose and usage. Minor gap: no mention of output representation (e.g., image format).

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 100% and the description for 'url' is identical to the schema. No additional semantics added beyond what schema provides, baseline 3.

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 captures and returns a rendered screenshot, and adds context about when visuals are relevant. It implicitly differentiates from sibling tools like fetch_url and search_web.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a usage scenario ('when not just the data but also the visuals are relevant'), giving clear context but no explicit exclusions or alternatives.

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. Dates show when Glama detected each change.

  1. 3 tool updatesv0.9.1
    • First observedfetch_url
    • First observedsearch_web
    • First observedview_website

TDQS

A3.8/5.0
Disambiguation5/5

Each tool has a distinct purpose: fetching URL content, performing web search, and capturing website screenshots. No overlap in functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with underscores (fetch_url, search_web, view_website), making them predictable and easy to understand.

Tool Count5/5

Three tools is appropriate for a web utilities server, covering the core needs without being too minimal or excessive.

Completeness4/5

The tool set covers key web interactions: fetching content, searching, and visual capture. A minor gap might be the lack of a dedicated tool for downloading files or parsing specific formats, but fetch_url addresses most content types.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

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/pietz/mcp-web-tools'

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