Skip to main content

pvl-webtools

Web search (via SearXNG) and fetch tools with MCP server.

Documentation

Installation

pip install pvl-webtools

# With MCP server support
pip install pvl-webtools[mcp]

# With markitdown for LLM-friendly markdown output (recommended)
pip install pvl-webtools[markdown]

# With trafilatura for article text extraction
pip install pvl-webtools[extraction]

# Everything
pip install pvl-webtools[all]

Usage

Direct Usage

import asyncio
from pvlwebtools import web_search, web_fetch

async def main():
    # Search (requires SEARXNG_URL env var)
    results = await web_search("python async best practices", max_results=5)
    for r in results:
        print(f"{r.title}: {r.url}")

    # Fetch and extract article
    page = await web_fetch("https://example.com/article")
    print(page.content)

asyncio.run(main())

With SearXNG Client

from pvlwebtools import SearXNGClient

client = SearXNGClient(url="http://localhost:8888")
if client.check_health():
    results = await client.search("query", domain_filter="wikipedia.org")

As MCP Server

# Set SearXNG URL
export SEARXNG_URL="http://localhost:8888"

# Optional: enable verbose logging (sent to stderr)
export VERBOSE=1

# Run server
uvx pvl-webtools-mcp

Docker (Streamable HTTP)

# Pull and run
docker run -d -p 8000:8000 \
  -e SEARXNG_URL="http://your-searxng:8888" \
  ghcr.io/pvliesdonk/pvl-webtools:latest

# MCP endpoint available at http://localhost:8000/mcp

See Docker Deployment for full documentation.

Configuration

Environment Variable Description
SEARXNG_URL SearXNG instance URL (required for web_search)
LOG_LEVEL Optional logging level for the MCP server (DEBUG, INFO, TRACE, etc.). TRACE removes dependency filtering so every log (including FastMCP internals) is emitted.
VERBOSE Convenience flag; set to 1/true for debug logging without exposing dependency noise.

Tools

web_search

Search the web via SearXNG metasearch engine.

  • query: Search query
  • max_results: 1-20 (default 5)
  • domain_filter: Limit to domain (e.g., "wikipedia.org")
  • recency: "all_time", "day", "week", "month", "year"

web_fetch

Fetch and extract content from URLs.

  • url: URL to fetch
  • extract_mode:
    • "markdown" (default): LLM-friendly markdown via markitdown
    • "article": Plain text via trafilatura
    • "raw": Raw HTML (truncated)
    • "metadata": Title, description, Open Graph tags

License

MIT

Metadata

Release files for pvl-webtools 1.0.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 pvl-webtools 1.0.1
File Size Uploaded Provenance
pvl_webtools-1.0.1.tar.gz 23.4 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for pvl-webtools 1.0.1
File Interpreter ABI Platform
pvl_webtools-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 39.2 kB

Release files / pvl_webtools-1.0.1.tar.gz

Download URL pvl_webtools-1.0.1.tar.gz
Size 23.4 kB
Tags Source
SHA-256 checksum
How to use checksums
2f084fec8c95fb8d4484d5a00153185ed22ec5cc8922f0f1a43fa2f3539b8103
BLAKE2b-256 checksum
How to use checksums
e1ae8c4d946cb4e00bbf9cb33c922e79040c70bf4750102fa17f5eca544273e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 5, 2026.

Transparency log

Release files / pvl_webtools-1.0.1-py3-none-any.whl

Download URL pvl_webtools-1.0.1-py3-none-any.whl
Size 15.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a7e12ef7628787d1edd8e4028955762f3c44e903dda2c4b90139c607662f4294
BLAKE2b-256 checksum
How to use checksums
5d5e16b03eeddc24d2fc1e455a0353715f6369127e9b3c7d18070a58b8083966
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 5, 2026.

Transparency log

Security for pvl-webtools 1.0.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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for pvl_webtools-1.0.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 5, 2026.

Transparency log

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