[build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" [tool.poetry] name = "pypi-query-mcp-server" version = "0.1.0" description = "A Model Context Protocol (MCP) server for querying PyPI package information, dependencies, and compatibility" authors = ["Hal "] readme = "README.md" license = "MIT" homepage = "https://github.com/loonghao/pypi-query-mcp-server" repository = "https://github.com/loonghao/pypi-query-mcp-server" documentation = "https://github.com/loonghao/pypi-query-mcp-server" keywords = ["mcp", "pypi", "package", "dependency", "python"] classifiers = [ "Development Status :: 3 - Alpha", "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 :: Libraries :: Python Modules", "Topic :: System :: Software Distribution", ] packages = [{include = "pypi_query_mcp"}] [tool.poetry.dependencies] python = "^3.10" fastmcp = "^0.2.0" httpx = "^0.27.0" packaging = "^24.0" pydantic = "^2.0.0" click = "^8.1.0" [tool.poetry.group.dev.dependencies] pytest = "^8.0.0" pytest-asyncio = "^0.23.0" pytest-cov = "^4.0.0" pytest-mock = "^3.12.0" ruff = "^0.1.0" mypy = "^1.8.0" pre-commit = "^3.6.0" nox = "^2024.3.2" [tool.poetry.scripts] pypi-query-mcp-server = "pypi_query_mcp.server:main" pypi-query-mcp = "pypi_query_mcp.server:main" [tool.ruff] target-version = "py310" line-length = 88 [tool.ruff.lint] select = [ "E", # pycodestyle errors "W", # pycodestyle warnings "F", # pyflakes "I", # isort "B", # flake8-bugbear "C4", # flake8-comprehensions "UP", # pyupgrade ] ignore = [ "E501", # line too long, handled by black "B008", # do not perform function calls in argument defaults "C901", # too complex ] [tool.ruff.lint.per-file-ignores] "__init__.py" = ["F401"] [tool.isort] profile = "black" multi_line_output = 3 line_length = 88 known_first_party = ["pypi_query_mcp"] [tool.mypy] python_version = "3.10" check_untyped_defs = true disallow_any_generics = true disallow_incomplete_defs = true disallow_untyped_defs = true no_implicit_optional = true warn_redundant_casts = true warn_unused_ignores = true [tool.pytest.ini_options] minversion = "6.0" addopts = "-ra -q --strict-markers --strict-config" testpaths = ["tests"] asyncio_mode = "auto" [tool.coverage.run] source = ["pypi_query_mcp"] omit = ["tests/*"] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "if self.debug:", "if settings.DEBUG", "raise AssertionError", "raise NotImplementedError", "if 0:", "if __name__ == .__main__.:", ]