Skip to main content

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

Installation

Claude Desktop

</code></pre>
<h3 id="user-content-claude-code">Claude Code<a href="#user-content-claude-code" aria-label="Link to heading 'Claude Code'" data-heading-content="Claude Code" class="anchor"></a></h3>
<pre><code class="language-bash">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.

Metadata

Release files for mcp-web-tools 0.9.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mcp-web-tools 0.9.1
File Size Uploaded Provenance
mcp_web_tools-0.9.1.tar.gz 73.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for mcp-web-tools 0.9.1
File Interpreter ABI Platform
mcp_web_tools-0.9.1-py3-none-any.whl Python 3 none any Details

Total release size: 83.7 kB

Release files / mcp_web_tools-0.9.1.tar.gz

Download URL mcp_web_tools-0.9.1.tar.gz
Size 73.6 kB
Tags Source
SHA-256 checksum
How to use checksums
cf7b49f51cc9ae026100e6f3236799022c441da84119baaffb7c20c440892435
BLAKE2b-256 checksum
How to use checksums
909c44ebaffee41f86f5a43279a26f1c67f1a19fed1e01b8e7ca3f080bbe2a12
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.16 {"installer":{"name":"uv","version":"0.9.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / mcp_web_tools-0.9.1-py3-none-any.whl

Download URL mcp_web_tools-0.9.1-py3-none-any.whl
Size 10.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fea6f26e2db626184a28c10eb6b7ed557983a4abece4903bef7125c39b4ba6b6
BLAKE2b-256 checksum
How to use checksums
0e79d829ec1aa6c4dfafbbf2e522eac506a0895d554bf0ba9e6b80fc44c9e5d2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.16 {"installer":{"name":"uv","version":"0.9.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for mcp-web-tools 0.9.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page