kicad-mcp/pyproject.toml
Ryan Malloy ce65035a17 Add batch operations, power symbols, pattern templates, and schematic editing
New modules:
- patterns/ library: decoupling bank, pull resistor, crystal oscillator
  placement with power symbol attachment and grid math helpers
- tools/batch.py: atomic file-based batch operations with dry_run
- tools/power_symbols.py: add_power_symbol with auto #PWR refs
- tools/schematic_patterns.py: MCP wrappers for pattern library
- tools/schematic_edit.py: modify/remove components, title blocks, annotations
- resources/schematic.py: schematic data resources

43 new tests (99 total), lint clean.
2026-03-04 16:55:09 -07:00

118 lines
2.7 KiB
TOML

[build-system]
requires = ["hatchling>=1.28.0"]
build-backend = "hatchling.build"
[project]
name = "mckicad"
version = "2026.03.03"
description = "MCP server for KiCad electronic design automation"
readme = "README.md"
license = { text = "MIT" }
authors = [{ name = "Ryan Malloy", email = "ryan@supported.systems" }]
keywords = ["kicad", "eda", "electronics", "pcb", "mcp", "model-context-protocol"]
classifiers = [
"Development Status :: 4 - Beta",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)",
"Typing :: Typed",
]
requires-python = ">=3.12"
dependencies = [
"fastmcp>=3.1.0",
"pyyaml>=6.0.3",
"defusedxml>=0.7.1",
"kicad-python>=0.5.0",
"kicad-sch-api>=0.5.6",
"requests>=2.32.5",
]
[project.urls]
Homepage = "https://git.supported.systems/warehack.ing/mckicad"
[project.scripts]
mckicad = "mckicad.server:main"
[tool.hatch.build.targets.wheel]
packages = ["src/mckicad"]
[dependency-groups]
dev = [
"pytest>=8.4.2",
"pytest-asyncio>=1.3.0",
"pytest-mock>=3.15.1",
"pytest-cov>=7.0.0",
"ruff>=0.15.1",
"mypy>=1.19.1",
]
[tool.ruff]
target-version = "py312"
line-length = 100
src = ["src", "tests"]
[tool.ruff.lint]
select = ["E", "W", "F", "I", "B", "C4", "UP", "SIM"]
ignore = ["E501", "B008", "C901", "B905"]
unfixable = ["B"]
[tool.ruff.lint.per-file-ignores]
"tests/**/*.py" = ["S101", "D103", "SLF001"]
[tool.ruff.lint.isort]
known-first-party = ["mckicad"]
force-sort-within-sections = true
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
[tool.mypy]
python_version = "3.12"
warn_return_any = true
warn_unused_configs = true
check_untyped_defs = true
no_implicit_optional = true
warn_redundant_casts = true
warn_unused_ignores = true
show_error_codes = true
[[tool.mypy.overrides]]
module = ["kipy.*", "kicad_sch_api.*", "requests.*"]
ignore_missing_imports = true
[tool.pytest.ini_options]
minversion = "7.0"
addopts = [
"--strict-markers",
"--strict-config",
"-ra",
"--tb=short",
]
testpaths = ["tests"]
pythonpath = ["."]
python_files = ["test_*.py"]
python_functions = ["test_*"]
markers = [
"unit: Unit tests",
"integration: Integration tests",
"slow: Tests that take more than a few seconds",
"requires_kicad: Tests that require KiCad CLI to be installed",
]
asyncio_mode = "auto"
filterwarnings = [
"ignore::DeprecationWarning",
"ignore::PendingDeprecationWarning",
]
[tool.coverage.run]
source = ["mckicad"]
branch = true
omit = ["tests/*"]
[tool.coverage.report]
precision = 2
show_missing = true