[build-system] requires = ["hatchling>=1.26"] build-backend = "hatchling.build" [project] name = "coffee-roaster-mcp" dynamic = ["version"] description = "RoastPilot: an MCP server for coffee-roaster telemetry and controlled actuation." readme = "README.md" requires-python = ">=3.11" license = { file = "LICENSE" } authors = [ { name = "Sertan Yamaner" } ] maintainers = [ { name = "Sertan Yamaner" } ] keywords = [ "coffee-roaster-control", "coffee", "coffee-roasting", "mcp", "model-context-protocol", "roast-logging", "roastpilot" ] classifiers = [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: System :: Hardware", "Topic :: Utilities", "Typing :: Typed" ] dependencies = [ "huggingface_hub>=0.23,<1", "mcp>=1.0.0,<2", "numpy>=1.24,<3", "onnxruntime>=1.18,<2", "pyserial>=3.5", "PyYAML>=6.0.2", "scipy>=1.11,<2", "sounddevice>=0.5,<1", "yoctopuce>=2.0,<3" ] [project.urls] Homepage = "https://github.com/syamaner/coffee-roaster-mcp" Documentation = "https://github.com/syamaner/coffee-roaster-mcp#readme" Repository = "https://github.com/syamaner/coffee-roaster-mcp" Issues = "https://github.com/syamaner/coffee-roaster-mcp/issues" "Architecture Article" = "https://dev.to/syamaner/part-1-the-architecture-the-agent-spec-driven-ml-development-with-warpoz-3al6" "Prototype Intro" = "https://dev.to/syamaner/part-1-training-a-neural-network-to-detect-coffee-first-crack-from-audio-an-agentic-development-1jei" "Prototype MCP Post" = "https://dev.to/syamaner/part-2-building-mcp-servers-to-control-a-home-coffee-roaster-an-agentic-development-journey-with-58ik" "First-Crack Model" = "https://huggingface.co/syamaner/coffee-first-crack-detection" "First-Crack Dataset" = "https://huggingface.co/datasets/syamaner/coffee-first-crack-audio" "First-Crack Demo" = "https://huggingface.co/spaces/syamaner/coffee-first-crack-detection" [project.scripts] coffee-roaster-mcp = "coffee_roaster_mcp.cli:main" [dependency-groups] dev = [ "build>=1.2", "jsonschema>=4.0,<5", "pytest>=8.0", "pytest-cov>=5.0", "ruff>=0.8", "pyright==1.1.411", "types-PyYAML>=6.0" ] [tool.hatch.build.targets.wheel] packages = ["src/coffee_roaster_mcp"] [tool.hatch.version] path = "src/coffee_roaster_mcp/__init__.py" [tool.pytest.ini_options] testpaths = ["tests"] addopts = "-q" pythonpath = ["src"] [tool.coverage.run] branch = true source = ["coffee_roaster_mcp"] [tool.coverage.report] show_missing = true skip_covered = true fail_under = 90 [tool.coverage.html] directory = "htmlcov" [tool.ruff] line-length = 100 target-version = "py311" [tool.ruff.lint] select = ["E", "F", "I", "UP", "B", "SIM"] [tool.pyright] pythonVersion = "3.11" typeCheckingMode = "strict" include = ["src", "tests"] venvPath = "." venv = ".venv"