[build-system] requires = ["hatchling>=1.24"] build-backend = "hatchling.build" [project] name = "callrail-mcp" version = "1.2.2" description = "Model Context Protocol (MCP) server for the CallRail REST API v3" readme = "README.md" requires-python = ">=3.10" license = { text = "MIT" } authors = [ { name = "Steve Japalucci", email = "s@pghdma.com" }, ] maintainers = [ { name = "Steve Japalucci", email = "s@pghdma.com" }, ] keywords = ["mcp", "model-context-protocol", "callrail", "claude", "anthropic", "call-tracking"] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Communications :: Telephony", "Topic :: Software Development :: Libraries :: Python Modules", ] dependencies = [ "mcp>=1.23.0", "requests>=2.33.0", ] [project.optional-dependencies] dev = [ "pytest>=7.4", "pytest-mock>=3.12", "responses>=0.25", "ruff>=0.5", "mypy>=1.10", "types-requests", "hypothesis>=6.100", "bandit>=1.7", ] [project.scripts] callrail-mcp = "callrail_mcp.server:main" [project.urls] Homepage = "https://github.com/pghdma/callrail-mcp" Repository = "https://github.com/pghdma/callrail-mcp" Issues = "https://github.com/pghdma/callrail-mcp/issues" Documentation = "https://github.com/pghdma/callrail-mcp#readme" Changelog = "https://github.com/pghdma/callrail-mcp/blob/main/CHANGELOG.md" [tool.hatch.build.targets.wheel] packages = ["src/callrail_mcp"] # py.typed (PEP 561) must ship or downstream type checkers ignore our # annotations. hatchling includes package files by default; this is explicit # so it cannot regress silently. artifacts = ["src/callrail_mcp/py.typed"] # hatchling's sdist otherwise sweeps in everything not covered by the root # .gitignore, which for a working copy means local editor state and test # caches. Enumerate what belongs in a source distribution instead. [tool.hatch.build.targets.sdist] include = [ "src/callrail_mcp", "tests", "README.md", "CHANGELOG.md", "CONTRIBUTING.md", "SECURITY.md", "CODE_OF_CONDUCT.md", "LICENSE", "pyproject.toml", ] [tool.ruff] line-length = 110 target-version = "py310" [tool.ruff.lint] select = ["E", "F", "W", "I", "B", "UP", "SIM"] ignore = ["E501"] [tool.pytest.ini_options] testpaths = ["tests"] addopts = "-ra --strict-markers" [tool.mypy] python_version = "3.10" strict = true warn_return_any = true warn_unused_configs = true # The MCP server class is resolved at runtime so the package works on both # SDK majors (see _load_mcp_server_class), which necessarily makes the # `@mcp.tool()` decorator untyped. Everything else stays strict. [[tool.mypy.overrides]] module = "callrail_mcp.server" disallow_untyped_decorators = false