pyproject.toml•3.74 kB
[project]
name = "oxylabs-mcp"
version = "0.6.6"
description = "Oxylabs MCP server"
authors = [
{name="Augis Braziunas", email="augis.braziunas@oxylabs.io"},
{name="Rostyslav Borovyk", email="rostyslav.borovyk@oxylabs.io"},
]
readme = "README.md"
requires-python = ">=3.12"
classifiers = [
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Development Status :: 4 - Beta",
"Operating System :: OS Independent",
]
license = "MIT"
license-files = ["LICEN[CS]E*"]
dependencies = [
"fastmcp>=2.11.3",
"httpx>=0.28.1",
"lxml>=5.3.0,<6",
"lxml-html-clean>=0.4.1",
"markdownify>=0.14.1",
"oxylabs-ai-studio>=0.2.13",
"pydantic>=2.10.5",
"pydantic-settings>=2.8.1",
"smithery>=0.1.25",
]
[dependency-groups]
dev = [
"bandit>=1.8.6",
"black>=25.1.0",
"lxml-stubs>=0.5.1",
"mypy>=1.14.1",
"pytest>=8.3.4",
"pytest-asyncio>=0.25.2",
"pytest-cov>=6.1.1",
"pytest-mock>=3.14.0",
"ruff>=0.9.1",
]
e2e-tests = [
"agno>=1.8.1",
"anthropic>=0.50.0",
"google-genai>=1.13.0",
"openai>=1.77.0",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project.scripts]
oxylabs-mcp = "oxylabs_mcp:main"
[project.urls]
Homepage = "https://github.com/oxylabs/oxylabs-mcp"
Repository = "https://github.com/oxylabs/oxylabs-mcp"
[[tool.mypy.overrides]]
module = "markdownify.*"
ignore_missing_imports = true
strict = true
[tool.ruff]
target-version = "py312"
lint.select = [
"E", # pycodestyle (E, W) - https://docs.astral.sh/ruff/rules/#pycodestyle-e-w
"F", # Pyflakes (F) - https://docs.astral.sh/ruff/rules/#pyflakes-f
"W", # pycodestyle (E, W) - https://docs.astral.sh/ruff/rules/#pycodestyle-e-w
"I", # isort (I) https://docs.astral.sh/ruff/rules/#isort-i
"D", # pydocstyle (D) https://docs.astral.sh/ruff/rules/#pydocstyle-d
"S", # bandit (S) https://docs.astral.sh/ruff/rules/#flake8-bandit-s
"ARG", # flake8-unused-arguments - https://docs.astral.sh/ruff/rules/#flake8-unused-arguments-arg
"B", # flake8-bugbear - https://docs.astral.sh/ruff/rules/#flake8-bugbear-b
"C4", # flake8-comprehensions - https://docs.astral.sh/ruff/rules/#flake8-comprehensions-c4
"ISC", # flake8-implicit-str-concat - https://docs.astral.sh/ruff/rules/#flake8-implicit-str-concat-isc
"FA", # flake8-future-annotations - https://docs.astral.sh/ruff/rules/#flake8-future-annotations-fa
"FBT", # flake8-boolean-trap - https://docs.astral.sh/ruff/rules/#flake8-boolean-trap-fbt
"Q", # flake8-quotes (Q) https://docs.astral.sh/ruff/rules/#flake8-quotes-q
"ANN", # flake8-annotations (ANN) https://docs.astral.sh/ruff/rules/#flake8-annotations-ann
"PLR", # Refactor (PLR) https://docs.astral.sh/ruff/rules/#refactor-plr
"PT", # flake8-pytest-style (PT) https://docs.astral.sh/ruff/rules/#flake8-pytest-style-pt
]
lint.ignore = [
"D213", # Contradicts D212.
"D203", # Contradicts D211.
"D104", # Allow no docstrings in packages
"D100", # Allow no docstrings in modules
"ANN002", # https://docs.astral.sh/ruff/rules/missing-type-args/
"ANN003", # https://docs.astral.sh/ruff/rules/missing-type-kwargs/
"PLR0913", # Allow functions with many arguments
"PLR0912", # Allow many branches for functions
]
[tool.ruff.lint.per-file-ignores]
"tests/*" = ["D", "S101", "ARG001", "ANN", "PT011", "FBT", "PLR2004"]
"src/oxylabs_mcp/url_params.py" = ["E501"]
[tool.ruff.lint.pycodestyle]
max-line-length = 100
[tool.ruff.lint.isort]
known-first-party = ["src", "tests"]
lines-after-imports = 2
[tool.pytest.ini_options]
asyncio_default_fixture_loop_scope = "session"
asyncio_mode = "auto"
[tool.black]
line-length = 100