pyproject.toml•4.73 kB
[project]
name = "biomcp-python"
version = "0.4.6"
description = "Biomedical Model Context Protocol Server"
authors = [{ name = "Ian Maurer", email = "imaurer@gmail.com" }]
readme = "README.md"
keywords = ['python']
requires-python = ">=3.10,<4.0"
classifiers = [
"Intended Audience :: Developers",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Software Development :: Libraries :: Python Modules",
]
dependencies = [
"certifi>=2025.1.31",
"diskcache>=5.6.3",
"httpx>=0.28.1",
"mcp[cli]>=1.12.3,<2.0.0",
"platformdirs>=4.3.6",
"psutil>=7.0.0",
"pydantic>=2.10.6",
"python-dotenv>=1.0.0",
"rich>=14.0.0",
"typer>=0.15.2",
"uvicorn>=0.34.2",
"alphagenome>=0.1.0",
]
[project.urls]
Homepage = "https://genomoncology.com/biomcp/"
Repository = "https://github.com/genomoncology/biomcp"
Documentation = "https://genomoncology.com/biomcp/"
[dependency-groups]
dev = [
"pytest>=7.2.0",
"pytest-xdist>=3.5.0",
"pre-commit>=2.20.0",
"tox-uv>=1.11.3",
"deptry>=0.22.0",
"mypy>=0.991",
"pytest-cov>=4.0.0",
"pytest-asyncio>=0.24.0",
"ruff>=0.9.2",
"mkdocs>=1.4.2",
"mkdocs-material>=8.5.10",
"mkdocstrings[python]>=0.26.1",
"anyio>=4.8.0",
# "ipython>=9.0.2",
"pytest-bdd>=8.1.0",
"tomlkit>=0.13.2",
"assertpy>=1.1",
"twine>=4.0.0",
"pandas>=2.0.0", # Used for mocking AlphaGenome responses in tests
"PyYAML>=6.0.0", # Used for mkdocs.yml parsing in scripts
"pydantic-ai>=0.0.14", # For testing Pydantic AI integration
]
[project.optional-dependencies]
api = [
]
worker = [
"fastapi>=0.110.0",
"starlette>=0.36.0",
"uvicorn>=0.28.0",
]
[build-system]
requires = ["setuptools >= 61.0"]
build-backend = "setuptools.build_meta"
[tool.setuptools.package-data]
biomcp = ["resources/*.md"]
[project.scripts]
biomcp = "biomcp.__main__:main"
[tool.mypy]
files = ["src"]
ignore_missing_imports = true
disallow_untyped_defs = false
disallow_any_unimported = false
no_implicit_optional = true
check_untyped_defs = false
warn_return_any = false
warn_unused_ignores = true
show_error_codes = true
plugins = [
"pydantic.mypy"
]
disable_error_code = [
"union-attr",
"prop-decorator",
]
[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "--import-mode=importlib"
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
markers = [
"integration: marks tests as integration tests (deselect with '-m \"not integration\"')",
]
filterwarnings = [
# Ignore protobuf version warnings from AlphaGenome
"ignore:Protobuf gencode version.*is exactly one major version older.*:UserWarning",
# Ignore false positive warning from pytest-xdist about coroutines
# This occurs during parallel test execution when mock objects are cleaned up
"ignore:coroutine 'search_trials_unified' was never awaited:RuntimeWarning",
]
[tool.ruff]
target-version = "py310"
line-length = 79
fix = true
unsafe-fixes = true
[tool.ruff.lint]
select = [
# flake8-2020
"YTT",
# flake8-bandit
"S",
# flake8-bugbear
"B",
# flake8-builtins
"A",
# flake8-comprehensions
"C4",
# flake8-debugger
"T10",
# flake8-simplify
"SIM",
# isort
"I",
# mccabe
"C90",
# pycodestyle
"E", "W",
# pyflakes
"F",
# pygrep-hooks
"PGH",
# pyupgrade
"UP",
# ruff
"RUF",
]
ignore = [
# LineTooLong
"E501",
# DoNotAssignLambda
"E731",
# Consider unpacking
"RUF005",
# Union for type annotations
"UP007",
# Asserts are ok when I say they are ok.
"S101",
]
[tool.ruff.lint.per-file-ignores]
"tests/*" = ["S101"]
"__init__.py" = ["I001"]
"src/biomcp/variants/external.py" = ["C901"] # Complex API interactions are acceptable
[tool.ruff.format]
preview = true
[tool.ruff.lint.flake8-bugbear]
extend-immutable-calls = [
"fastapi.Depends",
"fastapi.Query",
"typer.Argument",
"typer.Option",
]
[tool.coverage.report]
skip_empty = true
[tool.coverage.run]
branch = true
source = ["src"]
omit = [
"src/*/__main__.py",
"src/*/server.py",
"src/*/http_client.py",
]
[tool.deptry]
exclude = [
"example_scripts/python_sdk.py",
"venv",
".venv",
".direnv",
"tests",
".git",
"build",
"dist",
"scripts",
"spike",
]
[tool.deptry.per_rule_ignores]
DEP001 = ["alphagenome"] # Optional dependency, must be installed manually
DEP002 = ["uvicorn"]
DEP003 = ["biomcp", "alphagenome"]