[build-system] requires = ["hatchling>=1.26,<1.33"] build-backend = "hatchling.build" [project] name = "wavexis-mcp" description = "MCP server exposing the wavexis browser automation library to LLMs — 220 tools, 13 capability tiers, zero Node.js" dynamic = ["version"] readme = "README.md" license = { text = "MIT" } requires-python = ">=3.11" authors = [{ name = "Mathias Paulenko", email = "mathias.paulenko@outlook.com" }] maintainers = [{ name = "Mathias Paulenko", email = "mathias.paulenko@outlook.com" }] keywords = ["mcp", "browser", "automation", "cdp", "bidi", "screenshot", "scraping", "chromium", "llm"] classifiers = [ "Development Status :: 4 - Beta", "Environment :: Console", "Environment :: Web Environment", "Framework :: AsyncIO", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Internet :: WWW/HTTP :: Browsers", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Software Development :: Testing", "Typing :: Typed", ] dependencies = [ "mcp>=1.0,<2", "wavexis[cdp]>=2.20.1,<3.0", "pydantic>=2.0,<3", "pyyaml>=6.0,<7.0", "regex>=2024.0,<2030.0", ] [project.optional-dependencies] cdp = ["wavexis[cdp]"] bidi = ["wavexis[bidi]"] dev = [ "pytest>=8.0", "pytest-asyncio>=0.23", "pytest-cov>=4.0", "pytest-timeout>=2.2", "ruff>=0.4", "mypy>=1.10", "bandit>=1.7", "build>=1.2", "twine>=5.0", "mkdocs>=1.6", "mkdocs-material>=9.5", "mkdocstrings[python]>=1.0.6", "pymdown-extensions>=10.0", "pillow>=10.0", "wavexis[cdp]", "wavexis[bidi]", ] [project.scripts] wavexis-mcp = "wavexis_mcp.server:main" [project.urls] Homepage = "https://github.com/MathiasPaulenko/wavexis-mcp" Repository = "https://github.com/MathiasPaulenko/wavexis-mcp" Issues = "https://github.com/MathiasPaulenko/wavexis-mcp/issues" Documentation = "https://mathiaspaulenko.github.io/wavexis-mcp" Changelog = "https://github.com/MathiasPaulenko/wavexis-mcp/blob/main/CHANGELOG.md" [tool.hatch.version] path = "wavexis_mcp/__init__.py" [tool.ruff] line-length = 100 target-version = "py311" [tool.ruff.lint] select = ["E", "F", "I", "N", "UP", "B", "SIM", "ASYNC"] ignore = ["ASYNC109"] [tool.ruff.format] exclude = ["docs/**"] [tool.mypy] strict = true python_version = "3.11" [[tool.mypy.overrides]] module = ["yaml.*", "regex.*"] follow_imports = "skip" ignore_missing_imports = true [tool.pytest.ini_options] asyncio_mode = "auto" asyncio_default_test_loop_scope = "function" testpaths = ["tests"] filterwarnings = [ "ignore:'asyncio.get_event_loop_policy' is deprecated:DeprecationWarning", "ignore:'asyncio.set_event_loop_policy' is deprecated:DeprecationWarning", ] markers = [ "unit: fast isolated tests with mocks", "integration: tests against a real Chrome browser", "e2e: end-to-end tests with real Chrome through the full MCP server", "slow: tests that take more than 5 seconds", "chrome: tests that require Chrome specifically", ] [tool.hatch.build.targets.wheel] packages = ["wavexis_mcp"] [tool.hatch.build.targets.sdist] include = [ "/wavexis_mcp", "/README.md", "/LICENSE", "/CHANGELOG.md", "/CONTRIBUTING.md", "/SECURITY.md", "/pyproject.toml", "/mkdocs.yml", "/docker-compose.yml", "/docs", "/scripts", "/tests", "/.github", "/.pre-commit-config.yaml", ]