mcp-web-tools


Namemcp-web-tools JSON
Version 0.6.0 PyPI version JSON
download
home_pageNone
SummaryA powerful MCP server to equip LLMs with web access, search, and content extraction capabilities
upload_time2025-09-01 11:25:02
maintainerNone
docs_urlNone
authorNone
requires_python>=3.12
licenseMIT
keywords extraction llm mcp pdf search web
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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:

- [x] Good search results without requiring an API key
- [x] Sophisticated fetching for more complex JavaScript sites
- [x] Extracting content in nicely formatted Markdown
- [x] Support for extracting content from PDFs
- [x] Support for loading and displaying images
- [x] Usage options for advanced cases like loading raw HTML

## Installation

### Claude Desktop

```json
```

### Claude Code

```bash
claude mcp add web-tools uvx mcp-web-tools
```

Or to also set the Brave Search API key:

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


## Internals

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

### Searching

We use the [Brave Search API](https://brave.com/search/api) if an API key is provided with fallbacks a scraped Google workaround and finally DuckDuckGO if everything else fails. While we'd recommend getting a free Brave API key, the fallbacks should work more than well enough for most use cases and work loads.

### Fetching

The fetching of web content is based on [Zendriver](https://github.com/stephanlensky/zendriver), a fork of [nodriver](https://github.com/ultrafunkamsterdam/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](https://trafilatura.readthedocs.io/en/latest/index.html) which consistently outperforms other alternatives for extracting content from HTML pages. For PDFs, we use [PyMuPDF4LLM](https://pymupdf.readthedocs.io/en/latest/pymupdf4llm/) which similarly extracts content in an easy-to-read format for LLMs, with advanced layout support.

## 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.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "mcp-web-tools",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.12",
    "maintainer_email": null,
    "keywords": "extraction, llm, mcp, pdf, search, web",
    "author": null,
    "author_email": "Paul-Louis Pr\u00f6ve <mail@plpp.de>",
    "download_url": "https://files.pythonhosted.org/packages/02/ba/af05bc519db13f95d8646d4f309552efdc026b2bc55e3fd278d8d3446a09/mcp_web_tools-0.6.0.tar.gz",
    "platform": null,
    "description": "# MCP Web Tools\n\nThis package provides a powerful MCP server to equip LLMs with web access, going beyond naive methods of searching, fetching and extracting content.\n\n## Introduction\n\nI 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:\n\n- [x] Good search results without requiring an API key\n- [x] Sophisticated fetching for more complex JavaScript sites\n- [x] Extracting content in nicely formatted Markdown\n- [x] Support for extracting content from PDFs\n- [x] Support for loading and displaying images\n- [x] Usage options for advanced cases like loading raw HTML\n\n## Installation\n\n### Claude Desktop\n\n```json\n```\n\n### Claude Code\n\n```bash\nclaude mcp add web-tools uvx mcp-web-tools\n```\n\nOr to also set the Brave Search API key:\n\n```bash\nclaude mcp add web-tools uvx mcp-web-tools -e BRAVE_SEARCH_API_KEY=<key>\n```\n\n\n## Internals\n\nThe package is written in Python using powerful libraries and services under the hood to improve results.\n\n### Searching\n\nWe use the [Brave Search API](https://brave.com/search/api) if an API key is provided with fallbacks a scraped Google workaround and finally DuckDuckGO if everything else fails. While we'd recommend getting a free Brave API key, the fallbacks should work more than well enough for most use cases and work loads.\n\n### Fetching\n\nThe fetching of web content is based on [Zendriver](https://github.com/stephanlensky/zendriver), a fork of [nodriver](https://github.com/ultrafunkamsterdam/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.\n\n### Extracting\n\nFor web extraction, we use [Trafilatura](https://trafilatura.readthedocs.io/en/latest/index.html) which consistently outperforms other alternatives for extracting content from HTML pages. For PDFs, we use [PyMuPDF4LLM](https://pymupdf.readthedocs.io/en/latest/pymupdf4llm/) which similarly extracts content in an easy-to-read format for LLMs, with advanced layout support.\n\n## Contributing\n\nWhile 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.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A powerful MCP server to equip LLMs with web access, search, and content extraction capabilities",
    "version": "0.6.0",
    "project_urls": {
        "Homepage": "https://github.com/pietz/mcp-web-tools",
        "Issues": "https://github.com/pietz/mcp-web-tools/issues"
    },
    "split_keywords": [
        "extraction",
        " llm",
        " mcp",
        " pdf",
        " search",
        " web"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7df8d0f24e17d6ebe3eccfa1019c1936ea9ca2da7204c1fa46019a2926c03272",
                "md5": "eb01ee0697fe01ff856d52e396c7e47b",
                "sha256": "5013a424fd59e3726282a012f8cd844b3717c6e902e5e66d334c938f0c89d871"
            },
            "downloads": -1,
            "filename": "mcp_web_tools-0.6.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "eb01ee0697fe01ff856d52e396c7e47b",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.12",
            "size": 7774,
            "upload_time": "2025-09-01T11:25:01",
            "upload_time_iso_8601": "2025-09-01T11:25:01.566820Z",
            "url": "https://files.pythonhosted.org/packages/7d/f8/d0f24e17d6ebe3eccfa1019c1936ea9ca2da7204c1fa46019a2926c03272/mcp_web_tools-0.6.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "02baaf05bc519db13f95d8646d4f309552efdc026b2bc55e3fd278d8d3446a09",
                "md5": "c5ef25d46ab2f5b54342f80e61f2b8f9",
                "sha256": "0039cf0999ebe528522e465da598f018df1a55543bb33d42d602508e5c6eb583"
            },
            "downloads": -1,
            "filename": "mcp_web_tools-0.6.0.tar.gz",
            "has_sig": false,
            "md5_digest": "c5ef25d46ab2f5b54342f80e61f2b8f9",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.12",
            "size": 53500,
            "upload_time": "2025-09-01T11:25:02",
            "upload_time_iso_8601": "2025-09-01T11:25:02.645370Z",
            "url": "https://files.pythonhosted.org/packages/02/ba/af05bc519db13f95d8646d4f309552efdc026b2bc55e3fd278d8d3446a09/mcp_web_tools-0.6.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-01 11:25:02",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "pietz",
    "github_project": "mcp-web-tools",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "mcp-web-tools"
}
        
Elapsed time: 1.85195s