[project] name = "mcp-server-sigma" dynamic = ["version"] description = "Enterprise Model Context Protocol (MCP) server for Sigma Computing — provision dashboards, construct data models, and automate cloud analytics." readme = "README.md" license = "Apache-2.0" requires-python = ">=3.11" authors = [ {name = "Christian Claudio", email = "christianclaudio@mail.com"}, ] keywords = ["sigma", "computing", "mcp", "model-context-protocol", "analytics", "bi", "mcp-server-sigma", "fastmcp"] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Software Development :: Libraries", ] dependencies = [ "mcp>=2.3.0", "fastmcp>=4.1.3", # certifi floor from FastMCP's October 2026 certificate authority incident notice: # https://github.com/PrefectHQ/fastmcp/blob/main/SECURITY.md#certificate-authority-incident-october-2026 # httpx verifies upstream TLS against certifi's bundle. "certifi>=2026.10.19", "httpx>=0.28.1", "pyjwt>=2.8.0", "pydantic>=2.13.5", "pydantic-settings>=2.15.0", ] [project.optional-dependencies] # Code Mode is optional: FastMCP ships its pydantic-monty sandbox as the code-mode extra. # Users install mcp-server-sigma[code-mode]; dev repeats the same pin so tests run execute. code-mode = [ "fastmcp[code-mode]>=4.1.3", ] dev = [ "fastmcp[code-mode]>=4.1.3", "jsonschema>=4.26.0", "pytest>=8.0.0", "pytest-asyncio>=0.23.0", "pytest-cov>=5.0.0", "respx>=0.21.0", "ruff>=0.16,<0.18", "mypy>=1.11.0", "pyyaml>=6.0", "opentelemetry-sdk>=1.45.0,<1.46", "build>=1.2.0", "twine>=5.0.0", "pip-licenses>=5.0.0", ] [project.scripts] mcp-server-sigma = "sigma_mcp.server:main" sigma-mcp = "sigma_mcp.server:main" [project.urls] Homepage = "https://github.com/christianclaudio/mcp-server-sigma" Repository = "https://github.com/christianclaudio/mcp-server-sigma" Issues = "https://github.com/christianclaudio/mcp-server-sigma/issues" Documentation = "https://github.com/christianclaudio/mcp-server-sigma#readme" Changelog = "https://github.com/christianclaudio/mcp-server-sigma/releases" [build-system] requires = ["hatchling>=1.32.4,<2", "uv-dynamic-versioning>=0.14.1,<0.15"] build-backend = "hatchling.build" [dependency-groups] # Exact build-backend pins for the Docker image (not installed by default). uv.lock carries # their closure with hashes; scripts/gen_build_backend.py writes docker/build-backend.txt # from it, and tests/test_build_backend_lock.py fails if either drifts or leaves the # [build-system] ranges. build-backend = [ "hatchling==1.33.0", "uv-dynamic-versioning==0.14.1", ] [tool.hatch.version] source = "uv-dynamic-versioning" [tool.uv-dynamic-versioning] vcs = "git" style = "pep440" bump = true fallback-version = "0.0.0" [tool.uv] # uv 0.13.4 ships the updated bundled root certificates named in FastMCP's certificate authority # incident notice; uv refuses to run below this, and astral-sh/setup-uv installs from it. # https://docs.astral.sh/uv/reference/settings/#required-version required-version = ">=0.13.4" cache-keys = [{ file = "pyproject.toml" }, { git = { commit = true, tags = true } }] [tool.hatch.build.targets.wheel] packages = ["src/sigma_mcp"] [tool.mypy] strict = true packages = ["sigma_mcp"] mypy_path = "src" [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] pythonpath = ["src", "."] markers = [ "e2e: end-to-end live network tests against upstream services (run with -m e2e)", ] addopts = "-m 'not e2e' --strict-markers --cov=src/sigma_mcp --cov-report=term-missing --cov-fail-under=100" [tool.ruff] src = ["src"] target-version = "py311" line-length = 120 [tool.ruff.lint] select = ["E", "F", "I", "UP"] [tool.ruff.lint.per-file-ignores] # Test scripts favor readable inline output over strict line limits. "tests/*" = ["E501"] # server.py holds long tool descriptions and capability strings; splitting # these literals would hurt readability without improving the code. "src/sigma_mcp/server.py" = ["E501"] "src/sigma_mcp/tools/*" = ["E501"]