pyproject.toml•7.14 kB
[project]
name = "ableton-mcp"
version = "1.0.0"
description = "Ableton Live integration through the Model Context Protocol"
readme = "README.md"
requires-python = ">=3.10"
authors = [
{name = "Siddharth Ahuja", email = "ahujasid@gmail.com"}
]
license = {text = "MIT"}
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
dependencies = [
"mcp[cli]>=1.3.0",
]
[project.scripts]
ableton-mcp = "MCP_Server.server:main"
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"
[tool.setuptools]
packages = ["MCP_Server"]
[dependency-groups]
dev = [
"ruff>=0.8.0",
"mypy>=1.13.0",
"pytest>=8.4.0",
"pre-commit>=4.0.0",
]
# Ruff設定(高速なlinter/formatter)
[tool.ruff]
target-version = "py310"
line-length = 120 # 120文字制限に変更
[tool.ruff.lint]
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # pyflakes
"I", # isort
"N", # pep8-naming
"UP", # pyupgrade (Python構文の modernization)
"B", # flake8-bugbear (バグを防ぐルール)
"A", # flake8-builtins (built-in名の重複防止)
"COM", # flake8-commas (カンマの適切な使用)
"C4", # flake8-comprehensions (内包表記の最適化)
"DTZ", # flake8-datetimez (datetime使用時のタイムゾーン警告)
"T10", # flake8-debugger (debuggerの残存チェック)
"EM", # flake8-errmsg (エラーメッセージの改善)
"ISC", # flake8-implicit-str-concat (文字列結合の改善)
"G", # flake8-logging-format (loggingフォーマット)
"PIE", # flake8-pie (不要なコードの検出)
"T20", # flake8-print (print文の警告)
"PT", # flake8-pytest-style (pytest使用時のスタイル)
"Q", # flake8-quotes (クォートスタイル)
"RSE", # flake8-raise (raise文の改善)
"RET", # flake8-return (return文の改善)
"SIM", # flake8-simplify (コードの簡素化)
"TCH", # flake8-type-checking (TYPE_CHECKINGの使用推奨)
"ARG", # flake8-unused-arguments (未使用引数)
"PTH", # flake8-use-pathlib (pathlibの使用推奨)
"ERA", # eradicate (コメントアウトされたコードの検出)
"PL", # pylint (基本的なpylintルール)
"RUF", # Ruff独自のルール
]
ignore = [
# フォーマッター関連(自動修正されるため無視)
"E501", # line too long, handled by formatter
"W291", # trailing whitespace (handled by formatter)
"W292", # no newline at end of file (handled by formatter)
"W293", # blank line contains whitespace (handled by formatter)
# 開発効率重視のため緩和
"E722", # bare except (legacy code compatibility)
"F401", # imported but unused (module exports)
"F841", # local variable assigned but never used
"T201", # print found (デバッグ用途で使用する場合があるため)
"T203", # pprint found
# 過度に厳しいルールを緩和
"PLR0913", # too many arguments
"PLR0912", # too many branches
"PLR0915", # too many statements
"PLR2004", # magic value comparison
"PLR0911", # too many return statements
"PLW2901", # for loop variable overwritten
"PLW0603", # global statement usage (必要な場合がある)
"COM812", # trailing comma missing (formatterが処理)
"ISC001", # single line implicit string concatenation (formatterが処理)
# プロジェクト特性に合わせて緩和
"ARG001", # unused function argument (コールバック関数等で必要)
"ARG002", # unused method argument
"PTH123", # pathlib使用推奨だが、既存コードとの互換性重視
"EM101", # raw string in exception (簡潔なエラーメッセージを許可)
"EM102", # f-string in exception
"G004", # logging f-string (f-stringでのlogging許可)
"DTZ005", # timezone naive datetime (一部のAPIで必要)
"B011", # assert false (テストコードで使用)
"B904", # raise without from in except clause (簡潔なエラー処理を許可)
"SIM108", # if-else-block assignable to ternary (可読性重視)
"SIM105", # use contextlib.suppress (try-except-passを許可)
"C408", # unnecessary dict call (明示的なdict()を許可)
"RET504", # unnecessary assignment before return (可読性重視)
"RET505", # unnecessary elif after return (可読性重視)
"RUF010", # use explicit conversion flag (str()を許可)
"RUF013", # PEP 484 prohibits implicit Optional (既存コードとの互換性)
"RUF022", # __all__ is not sorted (手動管理を許可)
"N999", # invalid module name (プロジェクト固有の命名規則)
"N813", # camelcase imported as lowercase (レガシーライブラリ対応)
"A001", # variable shadows builtin (意図的な場合を許可)
"A004", # import shadows builtin (意図的な場合を許可)
"UP030", # format specifiers (既存コードとの互換性)
"UP035", # typing.Dict/List deprecated (既存コードとの互換性)
"PLR1714", # consider merging multiple comparisons (可読性重視)
"RUF005", # consider unpacking instead of concatenation (既存コードを尊重)
]
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
skip-magic-trailing-comma = false
line-ending = "auto"
docstring-code-format = true # docstring内のコードもフォーマット
[tool.ruff.lint.isort]
known-first-party = ["MCP_Server", "AbletonMCP_Remote_Script"]
split-on-trailing-comma = true
force-sort-within-sections = true
[tool.ruff.lint.flake8-pytest-style]
fixture-parentheses = false
mark-parentheses = false
[tool.ruff.lint.flake8-quotes]
inline-quotes = "double"
multiline-quotes = "double"
[tool.ruff.lint.pylint]
max-args = 8 # 引数の最大数を8に設定(デフォルトより緩和)
[tool.ruff.lint.per-file-ignores]
# テストファイルでは一部ルールを緩和
"tests/**/*.py" = [
"PLR2004", # magic value comparison
"S101", # assert usage
"ARG", # unused arguments
"PLR0913", # too many arguments
]
# __init__.pyファイルでは未使用importを許可
"**/__init__.py" = ["F401"]
# MyPy設定
[tool.mypy]
python_version = "3.10"
ignore_missing_imports = true
warn_return_any = false
warn_unused_configs = true
disallow_untyped_defs = false
disallow_incomplete_defs = false
check_untyped_defs = true
disallow_untyped_decorators = false
no_implicit_optional = false
warn_redundant_casts = true
warn_unused_ignores = false
warn_no_return = true
warn_unreachable = true
strict_equality = false
[[tool.mypy.overrides]]
module = "tests.*"
ignore_errors = true
# Flake8設定(ruffと併用する場合)
[tool.flake8]
max-line-length = 88
extend-ignore = ["E203", "W503"]
exclude = [".git", "__pycache__", "build", "dist", ".venv"]
[project.urls]
"Homepage" = "https://github.com/ahujasid/ableton-mcp"
"Bug Tracker" = "https://github.com/ahujasid/ableton-mcp/issues"