[project] name = "zendriver-mcp" version = "0.3.4" description = "Undetectable browser automation for LLM agents, spoken over MCP." readme = "README.md" license = { file = "LICENSE" } requires-python = ">=3.10" authors = [ { name = "Dylan Noorland" }, { name = "Shubham Choulkar (original upstream)" }, ] keywords = [ "mcp", "model-context-protocol", "browser-automation", "zendriver", "chrome-devtools-protocol", "cdp", "undetected", "cloudflare", "stealth", "scraping", "llm-agent", ] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Internet :: WWW/HTTP :: Browsers", "Topic :: Software Development :: Libraries :: Python Modules", ] dependencies = [ "zendriver>=0.14.0", "mcp>=1.0.0", "Pillow", ] [project.urls] Homepage = "https://github.com/bituq/zendriver-mcp" Repository = "https://github.com/bituq/zendriver-mcp" Issues = "https://github.com/bituq/zendriver-mcp/issues" Changelog = "https://github.com/bituq/zendriver-mcp/blob/main/CHANGELOG.md" [project.scripts] zendriver-mcp = "src.server:main" [dependency-groups] dev = [ "ruff>=0.7", "mypy>=1.11", "pytest>=8.0", "pytest-asyncio>=0.24", ] docs = [ "mkdocs>=1.6", "mkdocs-material>=9.5", "pymdown-extensions>=10.0", ] [tool.hatch.build.targets.wheel] packages = ["src"] [tool.hatch.build.targets.sdist] include = [ "src", "README.md", "LICENSE", "CHANGELOG.md", "pyproject.toml", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.ruff] line-length = 100 target-version = "py310" [tool.ruff.lint] select = [ "E", # pycodestyle errors "W", # pycodestyle warnings "F", # pyflakes "I", # isort "B", # flake8-bugbear "UP", # pyupgrade ] ignore = [ "E501", # line-too-long (handled by formatter) ] [tool.mypy] python_version = "3.10" strict = false ignore_missing_imports = true warn_unused_ignores = true warn_redundant_casts = true check_untyped_defs = true [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"]