[project]
name = "dish-mcp"
version = "0.1.0"
description = "MCP Server for booking rooms via DiSH"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"fastmcp>=2.13.1",
"pip>=25.3",
"playwright>=1.56.0",
"python-dotenv>=1.0.0",
"requests>=2.32.5",
"types-requests>=2.32.0",
]
[project.optional-dependencies]
dev = [
"pytest>=8.0.0",
"pytest-cov>=4.0.0",
"responses>=0.25.0",
]
[tool.pytest.ini_options]
testpaths = ["tests"]
pythonpath = ["src"]
addopts = "-v --tb=short"
# mypy configuration
[tool.mypy]
python_executable = ".venv/bin/python"
show_error_codes = true
mypy_path = "src"
explicit_package_bases = true
exclude = ["docs", "tests", "LICENSE"]
strict = true
namespace_packages = true
# black configuration
[tool.black]
line-length = 100
include = '\.pyi?$'
exclude = '''
/(
\.git
| \.hg
| \.mypy_cache
| \.tox
| \.venv
| _build
| buck-out
| build
)/
'''
# ruff configuration
[tool.ruff]
# use Python 3.10 as the minimum version for autofixing
target-version = "py310"
# Match black. Note that this also checks comment line length, but black does not format comments.
line-length = 100
show-fixes = true
[tool.ruff.lint]
ignore-init-module-imports = true
select = [
"C4", # flake8-comprehensions
"SIM", # flake8-simplify
"Q", # flake8-quotes
"ISC", # flake8-implicit-str-concat
"F", # pyflakes
"D", # pydocstyle
"E", # pycodestyle error
"W", # pycodestyle warning
"N", # pep8-naming
"I", # isort
"PL", # pylint rules from categories "Convention", "Error", and "Warning"
"PLE", # ruff currently implements only a subset of pylint's rules
"PLW", # pylint warning
"PLR", # pylint refactor
"UP", # pyupgrade
"C", # Complexity (mccabe+) & comprehensions
]
ignore = [
"UP006", # See https://github.com/bokeh/bokeh/issues/13143
"UP007", # See https://github.com/bokeh/bokeh/pull/13144
]
[tool.ruff.lint.per-file-ignores]
"tests/*" = [
"PLR2004", # Magic value comparisons are fine in tests
"PLR0913", # Too many arguments is fine in tests (fixtures)
"D", # Docstrings not required in tests
]
[tool.ruff.lint.pydocstyle]
# Use Google-style docstrings.
convention = "google"
[tool.ruff.lint.mccabe]
# Flag errors (`C901`) whenever the complexity level exceeds 5.
max-complexity = 5
# bandit configuration
[tool.bandit]
exclude_dirs = ["tests"]
# typos configuration
[tool.typos.files]
extend-exclude = [".gitignore", "LICENSE", ".*", "*.ipynb"]
[tool.typos.default.extend-words]
center = "center"
ve = "ve"
[tool.typos.default]
locale = "en-gb"