[project] name = "mcp-server-kicad" version = "0.20.1" description = "Byte-preserving MCP servers for KiCad: schematic capture, PCB layout, ERC, DRC, and manufacturing exports" readme = "README.md" requires-python = ">=3.10" authors = [{ name = "ProductOfAmerica" }] keywords = ["mcp", "kicad", "eda", "schematic", "pcb", "llm"] license = { text = "MIT" } classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", ] dependencies = [ # 2.x is the first line speaking MCP 2026-07-28; it drops mcp.server.fastmcp # entirely (FastMCP is now mcp.server.MCPServer) and serves 2025-era clients # from the same binary, so the floor is the whole v2 line rather than a # feature-probed release. 1.x is upstream security-fix-only as of 2026-07-28. "mcp>=2.0.0,<3.0.0", # models.py imports TypedDict and NotRequired from here, not from typing: # pydantic refuses typing.TypedDict on Python 3.10 and 3.11, both of which # this package supports. Already present transitively via pydantic; declared # because we import it directly. NotRequired has been available since 4.0. "typing-extensions>=4.6", ] [project.urls] Homepage = "https://github.com/ProductOfAmerica/mcp-server-kicad" Repository = "https://github.com/ProductOfAmerica/mcp-server-kicad" Issues = "https://github.com/ProductOfAmerica/mcp-server-kicad/issues" [project.scripts] mcp-server-kicad = "mcp_server_kicad.server:main" mcp-server-kicad-schematic = "mcp_server_kicad.schematic:main" mcp-server-kicad-pcb = "mcp_server_kicad.pcb:main" mcp-server-kicad-symbol = "mcp_server_kicad.symbol:main" mcp-server-kicad-footprint = "mcp_server_kicad.footprint:main" mcp-server-kicad-project = "mcp_server_kicad.project:main" [project.optional-dependencies] # kiutils builds board and schematic fixtures in the test suite and reads # written files back as an independent oracle. No runtime path parses # through it, so it is not a runtime dependency. dev = ["pytest>=9.0", "pytest-xdist>=3.6", "ruff", "pyright", "kiutils>=1.4"] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["mcp_server_kicad"] [tool.pytest.ini_options] pythonpath = ["tests"] markers = [ "no_kicad_validation: skip kicad-cli parseability check (for tests that intentionally produce invalid files)", "slow: builds a fresh uv environment; deselect with -m 'not slow'", "allow_network: this test genuinely needs the internet (see the _no_network fixture)", ] [tool.ruff] target-version = "py310" line-length = 100 [tool.ruff.lint] select = ["E", "F", "I", "W"] [tool.pyright] pythonVersion = "3.10" typeCheckingMode = "basic" reportOptionalMemberAccess = "warning" reportAttributeAccessIssue = "warning"