[build-system] requires = ["setuptools>=70.0.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "mcp-plesk-dev-docs" version = "0.7.0" description = "A unified MCP server that indexes and retrieves Plesk documentation using vector embeddings and semantic search with reranking" readme = "README.md" license = "MIT" authors = [ {name = "Gilson Siqueira", email = "gilson@example.com"} ] keywords = ["plesk", "mcp", "model-context-protocol", "semantic-search", "rag", "vector-database"] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", # 3.14 support is early — remove if unstable "Topic :: Documentation", "Topic :: System :: Monitoring", "Topic :: Utilities", ] requires-python = ">=3.13" dependencies = [ "beautifulsoup4>=4.14.3", "fastmcp>=3.2.4", "lancedb>=0.29.1", "numpy>=1.26.0", # used directly in server.py, tq_index.py, and scripts "psutil>=6.1.1", "pydantic>=2.10.0", "pydantic-settings>=2.7.1", "requests>=2.32.0", # used in ai_client.py (runtime LLM calls) and enrich_html_toc.py "sentence-transformers>=5.2.2", "torch>=2.4.0", "markdownify>=0.14.1", "tantivy>=0.22.0", "lance-namespace==0.6.1", "tq-search", ] [project.urls] Homepage = "https://github.com/barateza/mcp-plesk-dev-docs" Documentation = "https://github.com/barateza/mcp-plesk-dev-docs#readme" Repository = "https://github.com/barateza/mcp-plesk-dev-docs.git" "Bug Tracker" = "https://github.com/barateza/mcp-plesk-dev-docs/issues" [tool.setuptools] packages = ["mcp_plesk_dev_docs"] [project.scripts] # Console script to run the MCP server mcp-plesk-dev-docs = "mcp_plesk_dev_docs.server:main" [project.optional-dependencies] # Note: torch is already a dependency of sentence-transformers # For GPU support, install PyTorch with CUDA from https://pytorch.org/ # The server will automatically detect and use GPU acceleration if available. dev = [ "pytest>=8.0.0", "requests>=2.32.0", "ruff>=0.3.0", "pre-commit>=3.6.0", "mypy>=1.15.0", "bandit>=1.8.0", ] test = [ "pytest>=8.0.0", ] parsing = [ # Tree-sitter code parsing for chunking.py — gracefully degrades if missing. "tree-sitter>=0.23.0", "tree-sitter-language-pack>=0.1.0", ] # --- NEW CONFIGURATION BELOW --- [[tool.uv.index]] name = "pytorch-cu124" url = "https://download.pytorch.org/whl/cu124" explicit = true [tool.uv.sources] torch = [ { index = "pytorch-cu124", marker = "sys_platform == 'win32'" }, ] torchvision = [ { index = "pytorch-cu124", marker = "sys_platform == 'win32'" }, ] torchaudio = [ { index = "pytorch-cu124", marker = "sys_platform == 'win32'" }, ] [tool.ruff] line-length = 88 # Core runtime settings remain at top-level. Linter-specific selection # options live under the `lint` table per ruff newer config layout. [tool.ruff.lint] select = ["E", "F", "W", "TC", "B", "B9", "PLR", "C4"] extend-ignore = ["E203", "PLR2004"] extend-select = [] [tool.ruff.lint.pylint] max-args = 6 max-statements = 50 [tool.ruff.lint.per-file-ignores] "tests/*" = ["PLR", "C4", "E501"] "scripts/*" = ["PLR", "E501"] [tool.bandit] # Exclude test directory — B101 (assert_used) is the standard pytest assertion # pattern and not a security issue in test files. exclude_dirs = ["tests", ".venv", ".beads", ".git"] [tool.pytest.ini_options] asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "function" [dependency-groups] dev = [ "pytest-asyncio>=1.3.0", ]