Dependency changes: - fastmcp >=2.12.4 → >=3.0.2,<4 - Drop asyncio-mqtt (dead dependency, never imported) - Align pydantic, click, rich with FastMCP 3.x - Bump version to 2026.02.23 Docs site (docs-site/): - Astro Starlight with Tailwind v4 teal theme - 28 pages following Diataxis: 3 tutorials, 7 how-to guides, 13 reference pages, 4 explanation pages - Docker infrastructure (Caddy prod, Node HMR dev) - Configured for mcesptool.warehack.ing
126 lines
3.2 KiB
TOML
126 lines
3.2 KiB
TOML
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "mcesptool"
|
|
version = "2026.02.23"
|
|
description = "FastMCP server for ESP32/ESP8266 development with esptool integration"
|
|
readme = "README.md"
|
|
requires-python = ">=3.10"
|
|
license = { text = "MIT" }
|
|
authors = [
|
|
{ name = "Ryan Malloy", email = "ryan@supported.systems" }
|
|
]
|
|
|
|
keywords = [
|
|
"mcp", "model-context-protocol", "esp32", "esp8266",
|
|
"esptool", "esp-idf", "embedded", "iot", "fastmcp"
|
|
]
|
|
|
|
classifiers = [
|
|
"Development Status :: 4 - Beta",
|
|
"Intended Audience :: Developers",
|
|
"License :: OSI Approved :: MIT License",
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.10",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Topic :: Software Development :: Embedded Systems",
|
|
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
]
|
|
|
|
dependencies = [
|
|
"fastmcp>=3.0.2,<4", # FastMCP framework (v3)
|
|
"pyserial>=3.5", # Serial communication
|
|
"pyserial-asyncio>=0.6", # Async serial support
|
|
"thefuzz[speedup]>=0.22.1", # Fuzzy string matching
|
|
"pydantic>=2.11.7", # Data validation
|
|
"click>=8.1.0", # CLI framework
|
|
"rich>=13.9.4", # Rich console output
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest>=8.4.2",
|
|
"pytest-asyncio>=0.21.0",
|
|
"pytest-cov>=7.0.0",
|
|
"pytest-mock>=3.12.0",
|
|
"ruff>=0.13.2",
|
|
"mypy>=1.5.0",
|
|
"black>=23.0.0",
|
|
"pre-commit>=3.0.0",
|
|
"watchdog>=3.0.0", # Hot reload support
|
|
]
|
|
|
|
idf = [
|
|
"kconfiglib>=14.1.0", # Kconfig parsing
|
|
]
|
|
|
|
testing = [
|
|
"pytest-xdist>=3.0.0", # Parallel testing
|
|
"pytest-benchmark>=4.0.0", # Performance testing
|
|
"factory-boy>=3.3.0", # Test data factories
|
|
]
|
|
|
|
production = [
|
|
"prometheus-client>=0.19.0", # Metrics
|
|
"uvloop>=0.19.0", # Fast event loop
|
|
"gunicorn>=21.0.0", # WSGI server
|
|
]
|
|
|
|
[project.scripts]
|
|
mcesptool = "mcesptool.server:main"
|
|
|
|
[project.urls]
|
|
Homepage = "https://git.supported.systems/MCP/mcesptool"
|
|
Repository = "https://git.supported.systems/MCP/mcesptool"
|
|
Issues = "https://git.supported.systems/MCP/mcesptool/issues"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["src/mcesptool"]
|
|
|
|
[tool.ruff]
|
|
line-length = 100
|
|
target-version = "py310"
|
|
src = ["src", "tests"]
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "F", "W", "B", "I", "N", "UP", "ANN", "S", "C4", "DTZ", "T20"]
|
|
ignore = ["E501", "ANN101", "ANN102", "S101"]
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
"tests/*" = ["S101", "ANN"]
|
|
|
|
[tool.mypy]
|
|
python_version = "3.10"
|
|
warn_return_any = true
|
|
warn_unused_configs = true
|
|
disallow_untyped_defs = true
|
|
disallow_incomplete_defs = true
|
|
check_untyped_defs = true
|
|
strict_optional = true
|
|
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
asyncio_mode = "auto"
|
|
addopts = [
|
|
"--cov=src/mcesptool",
|
|
"--cov-report=html",
|
|
"--cov-report=term-missing",
|
|
"--cov-fail-under=85"
|
|
]
|
|
|
|
[tool.coverage.run]
|
|
source = ["src"]
|
|
omit = ["tests/*", "*/test_*"]
|
|
|
|
[tool.coverage.report]
|
|
exclude_lines = [
|
|
"pragma: no cover",
|
|
"def __repr__",
|
|
"raise AssertionError",
|
|
"raise NotImplementedError",
|
|
]
|