[build-system] requires = ["setuptools==84.0.0"] build-backend = "setuptools.build_meta" [project] name = "bosch-flow-mcp" version = "0.7.0" description = "MCP server for the Bosch eBike Flow API with OAuth, local cache, and battery trend analysis." readme = "README.md" license = "GPL-3.0-or-later" license-files = ["LICENSE"] requires-python = ">=3.13" keywords = ["bosch", "ebike", "mcp", "model-context-protocol", "cycling", "battery"] authors = [ {name = "jjdelrio", email = "641373+partymola@users.noreply.github.com"}, ] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Home Automation", ] # Every dependency is pinned to an exact version that the suite has been run # against. A range leaves the choice to the resolver, which is how `mcp` 2.0.0 # reached installs unannounced and broke them. Bump deliberately, never by # widening a spec. dependencies = [ "mcp==2.1.1", "anyio==4.15.0", # ZoneInfo needs an IANA tz database; ship one so activity local-date # conversion works on platforms without system tz data (e.g. Windows). "tzdata==2026.3", ] [project.scripts] bosch-flow-mcp = "bosch_flow_mcp.cli:main" [project.urls] Homepage = "https://github.com/partymola/bosch-flow-mcp" Repository = "https://github.com/partymola/bosch-flow-mcp" "Bug Tracker" = "https://github.com/partymola/bosch-flow-mcp/issues" [tool.setuptools.packages.find] where = ["src"] [project.optional-dependencies] dev = [ "pytest==9.1.1", "pytest-asyncio==1.4.0", "ruff==0.16.6", ] [tool.pytest.ini_options] testpaths = ["tests"] asyncio_mode = "auto" [tool.ruff] line-length = 100 target-version = "py313" [tool.ruff.lint] select = ["E", "F", "I"]