# Project metadata + pinned dependency stack. Installable via pip/uvx as # "garmin-coach-mcp" (console scripts: garmin-coach-mcp + coach-mcp alias) # AND runnable from a checkout (python server.py). # requirements.txt mirrors [project].dependencies for the documented # pip-install path; keep the two in sync. [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "garmin-coach-mcp" version = "1.1.0" description = "Adaptive AI training coach MCP server backed by Garmin Connect" readme = "README.md" license = "MIT" requires-python = ">=3.12" # CI + local dev run 3.14 keywords = [ "mcp", "mcp-server", "model-context-protocol", "garmin", "training", "coaching", "fitness", ] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: End Users/Desktop", "Operating System :: OS Independent", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Utilities", ] dependencies = [ "garminconnect==0.3.5", "fastmcp>=3.4,<4", "pydantic>=2.13,<3", "python-dotenv>=1.0,<2", "requests>=2.31,<3", "anthropic>=0.109.1,<1", ] [project.urls] Homepage = "https://github.com/snoozelieb/coach-mcp" Repository = "https://github.com/snoozelieb/coach-mcp" Changelog = "https://github.com/snoozelieb/coach-mcp/blob/main/CHANGELOG.md" Issues = "https://github.com/snoozelieb/coach-mcp/issues" [project.scripts] garmin-coach-mcp = "coach.server:main" coach-mcp = "coach.server:main" [dependency-groups] dev = [ "pytest==9.0.3", "pytest-asyncio==1.3.0", ] [tool.hatch.build.targets.wheel] # Ship the coach package only; non-Python files under it (notably # coach/defaults/*.json, the bootstrap seed data) are included by default. packages = ["coach"] [tool.pytest.ini_options] testpaths = ["tests"] pythonpath = ["."] asyncio_mode = "auto"