[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "aseprite-live-mcp" version = "0.2.0" description = "Unity-first MCP server for the live Aseprite editor (and headless batch)." readme = "README.md" requires-python = ">=3.10" license = { text = "MIT" } authors = [{ name = "Kyle Ocheltree", email = "hello@oaktree-games.com" }] keywords = ["aseprite", "mcp", "pixel-art", "unity", "gamedev", "model-context-protocol"] classifiers = [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Topic :: Multimedia :: Graphics :: Editors", ] dependencies = [ # >=1.10: first SDK line with structured output (outputSchema/structuredContent), # which the typed report tools depend on. "mcp>=1.10.0", # Imported directly by tools/_schemas.py (pydantic requires the # typing_extensions TypedDict on Python < 3.12). "typing-extensions>=4.9.0", ] [project.urls] Homepage = "https://github.com/oaktreegames/aseprite-live-mcp" Repository = "https://github.com/oaktreegames/aseprite-live-mcp" Issues = "https://github.com/oaktreegames/aseprite-live-mcp/issues" [project.optional-dependencies] # The live relay (bridge/relay_server.py) needs websockets; the MCP server itself # is stdlib-only besides mcp. relay = ["websockets>=12"] dev = ["pytest>=8"] [project.scripts] aseprite-live-mcp = "aseprite_live_mcp.__main__:main" [tool.hatch.build.targets.wheel] packages = ["aseprite_live_mcp"] [tool.pytest.ini_options] testpaths = ["tests"] addopts = "-q" [tool.ruff] line-length = 100 target-version = "py310" [tool.ruff.lint] # E/F/W core · I import order · UP modernize · B bugbear. The Lua-in-Python # string templates make long lines routine inside tool modules; E501 stays on, # with the templates exempt below. select = ["E", "F", "W", "I", "UP", "B"] [tool.ruff.lint.per-file-ignores] # Tool modules embed Lua templates where wrapping hurts readability; the relay # and demo scripts predate the lint config and read fine as-is. "aseprite_live_mcp/tools/*.py" = ["E501"] "tests/*" = ["E501"] "bridge/*" = ["E501"] "examples/*" = ["E501"]