[build-system] requires = ["hatchling>=1.24"] build-backend = "hatchling.build" [project] name = "allure-testops-mcp" version = "0.9.3" description = "MCP server for Allure TestOps — projects, launches, test cases, test results, defect categories" readme = "README.md" license = "MIT" requires-python = ">=3.10" authors = [ { name = "Mikhail Shchegolev" }, ] keywords = ["mcp", "allure", "allure-testops", "testing", "qa", "claude", "anthropic"] 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", "Topic :: Software Development :: Testing", "Topic :: Software Development :: Quality Assurance", ] dependencies = [ # Upper bound is load-bearing: mcp 2.0.0 (2026-07-28) removed # `mcp.server.fastmcp` entirely (the server class moved to # `mcp.server.mcpserver`), so an unbounded `mcp>=1.2` makes every fresh # install fail at import. Lift only together with a real 2.x migration. "mcp>=1.2,<2", "requests>=2.31", "urllib3>=2.0", "pydantic>=2.0", "typing-extensions>=4.5; python_version < '3.12'", ] [project.optional-dependencies] dev = [ "pytest>=7", "ruff>=0.5", "responses>=0.25", "tomli>=2.0; python_version < '3.11'", ] [project.scripts] allure-testops-mcp = "allure_testops_mcp.server:main" [project.urls] Homepage = "https://github.com/mshegolev/allure-testops-mcp" Issues = "https://github.com/mshegolev/allure-testops-mcp/issues" [tool.hatch.build.targets.wheel] packages = ["src/allure_testops_mcp"] [tool.ruff] line-length = 120 target-version = "py310" [tool.ruff.lint] select = ["E", "F", "W", "I", "B", "UP"] [tool.pytest.ini_options] testpaths = ["tests"] # Make `pytest` work from a bare source checkout (src layout) without an # editable install. CI still does `pip install -e .[dev]`, which also works. pythonpath = ["src"] # Integration tests hit a live Allure instance; they are deselected by default # and additionally skip themselves unless the required ALLURE_* env vars are set. # Run them explicitly with: pytest -m integration addopts = "-m 'not integration'" markers = [ "integration: live-instance test requiring ALLURE_URL / ALLURE_TOKEN / ALLURE_ENABLE_WRITE / ALLURE_TEST_PROJECT_ID", ]