[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "parlament-mcp" version = "0.3.5" description = "MCP server for the Swiss Parliament (Curia Vista OData API)" readme = "README.md" license = { file = "LICENSE" } requires-python = ">=3.11" keywords = [ "mcp", "model-context-protocol", "swiss-open-data", "swiss-parliament", "curia-vista", "parlament", "vorstösse", "abstimmungen", ] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Scientific/Engineering :: Artificial Intelligence", ] 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.27.0", "pydantic>=2.0.0", "pydantic-settings>=2.0.0", "structlog>=24.0.0,<27", "opentelemetry-api>=1.21.0", "opentelemetry-sdk>=1.21.0", "opentelemetry-instrumentation-httpx>=0.42b0", ] [project.optional-dependencies] dev = [ "pytest>=8.0.0", "pytest-asyncio>=0.23.0", "pytest-cov>=5.0.0", "respx>=0.21.0", # Exakter Pin, und die einzige Stelle, an der die ruff-Version dieses # Projekts steht. Als hier eine Spanne stand, loeste `pip install -e # ".[dev]"` auf die jeweils neueste Version auf, waehrend ci.yml # `ruff==0.16.3` darueber installierte — lokaler Lauf und Gate waren sich # also ueber die Version uneinig, und die CLAUDE.md musste das mit "die # Version von Hand setzen" auffangen. Der CI-Schritt ist entfallen. # `openparldata-mcp/pyproject.toml` traegt denselben Pin fuer sein eigenes # Gate; `test_werkzeug_versionen.py` haelt beide zusammen. "ruff==0.16.3", ] # OTLP-Export für Distributed Tracing (OBS-006). Ohne diese Extra werden Spans # erzeugt, aber nicht exportiert (nützlich lokal / in Tests). otel-export = [ "opentelemetry-exporter-otlp-proto-http>=1.21.0", ] [project.scripts] parlament-mcp = "parlament_mcp.server:main" [project.urls] Homepage = "https://github.com/malkreide/parlament-mcp" Repository = "https://github.com/malkreide/parlament-mcp" Issues = "https://github.com/malkreide/parlament-mcp/issues" [tool.hatch.build.targets.wheel] packages = ["src/parlament_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"]