[build-system] requires = ["setuptools>=68.0"] build-backend = "setuptools.build_meta" [project] name = "sandbox-env-mcp" version = "0.3.1" description = "Sandbox Environment Manager MCP server" requires-python = ">=3.12" readme = "README.md" license = {text = "AGPL-3.0-only OR Commercial-License"} authors = [{name = "Sandbox MCP Contributors"}] classifiers = [ "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", "License :: Other/Proprietary License", "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Software Development", ] dependencies = [ "docker>=7.0.0", "mcp>=1.0.0", "starlette>=0.36.0", "uvicorn>=0.27.0", ] # MCP registry identifier. Lives in [tool.mcp] (not [project]) because # setuptools >=68 rejects unknown keys in [project] under strict PEP 621 # validation, breaking `pip install .`. The authoritative source for MCP # registry publishing is ``server.json`` in the repo root; this table # exists so any tool that introspects pyproject.toml can also recover it. [tool.mcp] name = "io.github.hs3434/sandbox-env-mcp" [project.optional-dependencies] dev = [ "pytest>=8.0", "ruff>=0.6.0", "mypy>=1.10.0", ] [project.scripts] sandbox-mcp = "sandbox_mcp.server:main" sandbox-mcp-http = "sandbox_mcp.server:main_http" sandbox-env-mcp = "sandbox_mcp.server:main" sandbox-env-mcp-http = "sandbox_mcp.server:main_http" [tool.setuptools.packages.find] where = ["src"] [tool.pytest.ini_options] testpaths = ["tests"] addopts = "-ra -m 'not integration'" markers = [ "integration: requires a running Docker daemon; run with `pytest -m integration`", ] [tool.ruff] line-length = 100 target-version = "py312" [tool.ruff.lint] select = ["E", "F", "I", "W", "B", "UP", "SIM", "RUF"] [tool.ruff.lint.per-file-ignores] "src/sandbox_mcp/backends/docker_backend.py" = ["SIM115"] [tool.mypy] python_version = "3.12" strict = false warn_unused_ignores = true disallow_untyped_defs = false check_untyped_defs = false ignore_missing_imports = true disable_error_code = ["annotation-unchecked"]