[build-system]
requires = ["hatchling>=1.25.0", "hatch-vcs>=0.4.0"]
build-backend = "hatchling.build"
# ──────────────────────────────
# Project Metadata (PEP 621)
# ──────────────────────────────
[project]
name = "gdal-mcp"
dynamic = ["version"]
description = "FastMCP server for Python-native GDAL ops (Rasterio/PyProj/pyogrio|Fiona/Shapely)"
readme = "README.md"
requires-python = ">=3.11"
license = { file = "LICENSE" }
authors = [{ name = "GDAL MCP Team" }]
keywords = ["gdal", "mcp", "fastmcp", "geospatial", "raster", "geomatics", "remote sensing", "GIS", "QGIS"]
# Runtime dependencies — core only
dependencies = [
"fastmcp>=2.0,<3.0",
"pydantic>=2.0",
"typer>=0.12",
"rich>=13.0",
"pyyaml>=6.0",
"python-frontmatter>=1.0.0",
"markdown-it-py>=3.0.0",
"numpy>=2.2.6",
"rasterio>=1.3",
"pyproj>=3.6",
"shapely>=2.0",
"pyogrio>=0.7",
"fiona>=1.10.1",
"geopandas>=1.1.1",
]
[project.optional-dependencies]
# Dev tools (single source of truth). Install via: pip install .[dev]
dev = [
"pytest>=8.0",
"pytest-asyncio>=0.23",
"mypy>=1.10",
"ruff>=0.5",
"types-PyYAML>=6.0.0.20240917",
"pre-commit>=3.6",
]
[project.scripts]
# Console entrypoint - CLI exposed as `gdal`
gdal = "src.__main__:main"
[project.urls]
Homepage = "https://github.com/Wayfinder-Foundry/gdal-mcp"
Documentation = "https://github.com/Wayfinder-Foundry/gdal-mcp"
# ──────────────────────────────
# Hatch / Build configuration
# ──────────────────────────────
[tool.hatch.version]
source = "vcs"
[tool.hatch.build.targets.wheel]
# Package the real module under src/, not the src/ dir itself
packages = ["src"]
[dependency-groups]
dev = [
"mypy>=1.18.1",
"pytest>=8.4.2",
"ruff>=0.13.0",
]