[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "webcrawl-mcp" version = "0.1.0" description = "Lightweight MCP server for web scraping, search, and crawling — local-first with optional Firecrawl fallback" authors = [{name = "Andy Liszewski"}] readme = "README.md" requires-python = ">=3.12" license = {text = "MIT"} keywords = ["mcp", "model-context-protocol", "claude", "web-scraping", "crawling", "search", "trafilatura"] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Internet :: WWW/HTTP :: Indexing/Search", "Topic :: Software Development :: Libraries :: Python Modules", ] dependencies = [ "fastmcp>=2.0.0", # Floor pinned for CVE-2026-48710 ("BadHost"): Starlette < 1.0.1 has a # Host-header validation gap that poisons request.url.path. Pulled in # transitively via fastmcp/mcp (which only floor it at >=0.27); this # explicit floor stops the resolver from regressing to a vulnerable build. "starlette>=1.0.1", "httpx>=0.27.0", "trafilatura>=1.12.0", "beautifulsoup4>=4.12.0", "markdownify>=0.13.0", "ddgs>=8.0.0", ] [project.optional-dependencies] dev = [ "pytest>=8.0.0", "pytest-asyncio>=0.24.0", ] [project.scripts] webcrawl-mcp = "webcrawl_mcp.server:main" [project.urls] Homepage = "https://github.com/andyliszewski/webcrawl-mcp" Repository = "https://github.com/andyliszewski/webcrawl-mcp" Issues = "https://github.com/andyliszewski/webcrawl-mcp/issues" [tool.hatch.build.targets.wheel] packages = ["src/webcrawl_mcp"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"]