[project] name = "pagerduty-mcp" version = "1.1.0" description = "PagerDuty's official local MCP (Model Context Protocol) server which provides tools to interact with your PagerDuty account directly from your MCP-enabled client." readme = "README.md" requires-python = "~=3.12.0" dependencies = [ "mcp[cli]~=1.8", "pagerduty~=5.3", "typer~=0.16.0", ] [project.urls] Homepage = "https://github.com/PagerDuty/pagerduty-mcp-server" Documentation = "https://github.com/PagerDuty/pagerduty-mcp-server/tree/main/docs" Issues = "https://github.com/PagerDuty/pagerduty-mcp-server/issues" [project.scripts] pagerduty-mcp = "pagerduty_mcp.__main__:main" pagerduty-mcp-evals = "pagerduty_mcp_evals.__main__:main" [tool.pyright] include = ["app"] exclude = [] defineConstant = { DEBUG = true } reportMissingImports = "error" reportMissingTypeStubs = false pythonVersion = "3.12" executionEnvironments = [] [tool.ruff] # extends default list https://docs.astral.sh/ruff/settings/#exclude # removes common issues extend-exclude = [ ".ipynb_checkpoints", ".pytest_cache", ".venv", ".vscode", "build", "site-packages", ] line-length = 120 [tool.ruff.lint] # see https://docs.astral.sh/ruff/rules/ for information about rules select = [ "E", # pycodestyle - Error "F", # pyflakes "B", # flake8-bugbear "UP", # pyupgrade "SIM", # flake8-simplify "I", # isort "D", # docstrings "W", # pycodestyle - Warning "C4", # flake8-comprehensions "ASYNC", # flake8-async "A", # flake8-builtins "NPY", # numpy "RUF", # ruff specific "BLE", # blind-except "RET", # flake8-return "FBT", # flake8-boolean-trap "ISC", # flake8-implicit-string-concatenation "PIE", # flake8-pie ] # The following rule has been specifically rejected # "PL" - This is overly restrictive, if used will require finer grained control ignore = [ # conflicts with ruff format "ISC001", # Do not require docstrings "D100", "D101", "D102", "D104", "D105", "D106", "D107", ] # Allow fix for all enabled rules (when `--fix`) is provided. fixable = ["ALL"] unfixable = ["B"] # Allow unused variables when underscore-prefixed. dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" [tool.ruff.lint.per-file-ignores] "**/tests/*" = ['S101'] # allow use of assert in tests [tool.ruff.lint.pydocstyle] convention = "google" ignore-var-parameters = true [tool.pytest.ini_options] norecursedirs = ["tests/evals"] [build-system] requires = ["setuptools"] build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] where = ["."] [dependency-groups] dev = [ "boto3~=1.35", "coverage~=7.8", "deepdiff~=8.5", "ipykernel~=6.29", "openai~=1.84", "pyright~=1.1", "pytest~=8.3", "ruff~=0.12.0", ]