[project] name = "autocad-mcp-pro" version = "1.4.0" description = "Production-grade AutoCAD MCP server — COM API + ezdxf dual engine" readme = "README.md" requires-python = ">=3.11" license = "MIT" license-files = ["LICENSE"] authors = [ { name = "Umutcan Edizsalan" }, ] keywords = [ "autocad", "mcp", "model-context-protocol", "cad", "dxf", "ezdxf", "drafting", "engineering-drawing", ] classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Manufacturing", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Scientific/Engineering", "Topic :: Software Development :: Libraries :: Python Modules", ] dependencies = [ "fastmcp>=3.0", "ezdxf>=1.3", "pydantic>=2.0", ] [project.urls] Homepage = "https://github.com/U-C4N/Autocad-MCP" Repository = "https://github.com/U-C4N/Autocad-MCP" Issues = "https://github.com/U-C4N/Autocad-MCP/issues" Changelog = "https://github.com/U-C4N/Autocad-MCP/blob/main/CHANGELOG.md" [project.optional-dependencies] com = [ "pywin32>=306", "Pillow>=10.0", ] pdf = [ "matplotlib>=3.8", ] full = [ "pywin32>=306", "Pillow>=10.0", "matplotlib>=3.8", ] [project.scripts] autocad-mcp = "server:main" # Alias matching the PyPI distribution name so `uvx autocad-mcp-pro` works # without a --from indirection (MCP registry / uvx convention). autocad-mcp-pro = "server:main" [tool.uv] dev-dependencies = [ "pytest>=8.0", "pytest-asyncio>=0.23", "pytest-cov>=5.0", "ruff>=0.8", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] # Flat layout: no directory matches the project name, so hatchling needs an # explicit file selection (GH issue #2). server.py imports config + security. only-include = ["server.py", "config.py", "security.py", "version.py", "backends", "engineering"] [tool.ruff] line-length = 100 target-version = "py311" [tool.ruff.lint] select = ["E", "F", "I", "W", "UP", "B"] ignore = ["E501"] [tool.ruff.format] quote-style = "double" [tool.pytest.ini_options] asyncio_mode = "strict"