[project]
name = "bitrix24-mcp"
version = "1.0.1"
description = "MCP server for interacting with Bitrix24 using natural language and AI dialogues to get data, perform actions, and manage the system."
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"fast-bitrix24>=1.8.4",
"mcp[cli]>=1.4.1",
"structlog>=25.2.0",
"dishka>=1.5.3",
]
[project.scripts]
bitrix24-mcp = "src.main:run"
[tool.hatch.build.targets.wheel]
packages = ["src"]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[dependency-groups]
dev = ["ruff>=0.11.0"]
[tool.ruff]
line-length = 88
indent-width = 4
target-version = "py312"
fix = true
unsafe-fixes = false
cache-dir = "~/.cache/ruff"
[tool.ruff.format]
quote-style = "single"
line-ending = "auto"
indent-style = "space"
docstring-code-format = true
docstring-code-line-length = 20
[tool.ruff.lint]
select = ["ALL"]
exclude = ['tests/*']
ignore = [
"A003", # flake8-builtins - class attribute {name} is shadowing a python builtin
"B010", # flake8-bugbear - do not call setattr with a constant attribute value
"D100", # pydocstyle - missing docstring in public module
"D101", # pydocstyle - missing docstring in public class
"D102", # pydocstyle - missing docstring in public method
"D103", # pydocstyle - missing docstring in public function
"D104", # pydocstyle - missing docstring in public package
"D105", # pydocstyle - missing docstring in magic method
"D106", # pydocstyle - missing docstring in public nested class
"D107", # pydocstyle - missing docstring in __init__
"D202", # pydocstyle - no blank lines allowed after function docstring
"D205", # pydocstyle - 1 blank line required between summary line and description
"D415", # pydocstyle - first line should end with a period, question mark, or exclamation point
"E501", # pycodestyle line too long, handled by ruff format
"PLW2901", # pylint - for loop variable overwritten by assignment target
"RUF012", # Ruff-specific rule - annotated with classvar
"ISC001", # Ruff formatter incompatible
"CPY001", # ruff - copyright notice at the top of the file
"RUF001",
"RUF002",
"FBT002",
"FBT001",
"INP001",
"BLE001",
"ANN401",
]
[tool.ruff.lint.flake8-annotations]
mypy-init-return = true
[tool.ruff.lint.mccabe]
max-complexity = 15
[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["F401"]