[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "bag-epl-mcp" version = "1.0.3" description = "MCP Server for the Swiss BAG electronic benefits platform (ePL): SL, GGSL, MiGeL" readme = "README.md" license = { file = "LICENSE" } requires-python = ">=3.11" keywords = [ "mcp", "model-context-protocol", "swiss-open-data", "bag", "spezialitaetenliste", "ggsl", "migel", "krankenversicherung", "fhir", ] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: Healthcare Industry", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Scientific/Engineering :: Medical Science Apps.", ] dependencies = [ # Upper bound added deliberately: `mcp` 2.0.0 removed `mcp.server.fastmcp` # outright (the API moved to `mcp.server.mcpserver`), so an unbounded # `>=1.28.1` breaks every fresh install — CI and `pip install` alike. # Migrating to the 2.x API is real work and a decision to take on purpose, # not one a resolver should make silently. "mcp[cli]>=2.0.0,<3", "httpx>=0.28.1", "httpcore>=1.0.9", "pydantic>=2.13.4", "pydantic-settings>=2.14.1", "structlog>=25.5.0,<27", ] [project.optional-dependencies] http = [ "uvicorn>=0.48.0", "starlette>=1.2.1", ] otel = [ "opentelemetry-sdk>=1.42.1", "opentelemetry-exporter-otlp>=1.42.1", "opentelemetry-instrumentation-starlette>=0.63b1", "opentelemetry-instrumentation-httpx>=0.63b1", ] dev = [ "pytest>=9.0.3", "pytest-asyncio>=1.4.0", "pytest-cov>=7.1.0", "respx>=0.23.1", # Exakt gepinnt, nicht `>=`: ruff ist ein Gate, kein Hilfsmittel. Eine # neuere Version meldet Abweichungen an Code, den niemand angefasst hat. # Der Pin steht hier und nur hier — die CI installiert ihn ueber das # `dev`-Extra mit und hat keinen eigenen Pin-Schritt mehr. Beim Anheben: # Version aendern, `ruff format` einmal ueber die gelinteten Pfade laufen # lassen und das Ergebnis mit committen. "ruff==0.16.3", "uvicorn>=0.48.0", "starlette>=1.2.1", ] [project.scripts] bag-epl-mcp = "bag_epl_mcp.server:main" [project.urls] Homepage = "https://github.com/malkreide/bag-epl-mcp" Repository = "https://github.com/malkreide/bag-epl-mcp" Issues = "https://github.com/malkreide/bag-epl-mcp/issues" [tool.hatch.build.targets.wheel] packages = ["src/bag_epl_mcp"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] addopts = "-v --tb=short" markers = [ "live: live API tests (skipped in CI by default)", ] [tool.ruff] line-length = 100 target-version = "py311" [tool.ruff.lint] select = ["E", "F", "W", "I", "UP"] ignore = ["E501"]