[project]
name = "registry-review-mcp"
version = "2.0.0"
description = "MCP server for automating carbon credit project registry reviews"
readme = "README.md"
authors = [
{ name = "Shawn Anderson", email = "shawn@longtailfinancial.com" }
]
requires-python = ">=3.10"
dependencies = [
"mcp[cli]>=1.21.0",
"pdfplumber>=0.11.0",
"pydantic>=2.11.0",
"python-dateutil>=2.8.0",
"fiona>=1.9.0",
"structlog>=24.0.0",
"pydantic-settings>=2.12.0",
"anthropic>=0.40.0",
"rapidfuzz>=3.14.3",
"marker-pdf>=0.2.17",
"psutil>=5.9.0",
"pymupdf4llm>=0.2.0",
]
[project.scripts]
registry-review-mcp = "registry_review_mcp.server:main"
[project.optional-dependencies]
gpu = [
"torch>=2.0.0",
]
[dependency-groups]
dev = [
"pytest>=8.0.0",
"pytest-asyncio>=0.23.0",
"black>=24.0.0",
"ruff>=0.1.0",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.uv]
exclude-newer = "2025-11-12T00:00:00Z"
[tool.ruff]
line-length = 100
target-version = "py310"
[tool.ruff.lint]
select = ["E", "F", "I"]
[tool.ruff.lint.flake8-tidy-imports.banned-api]
"src.registry_review_mcp".msg = "Import from 'registry_review_mcp', not 'src.registry_review_mcp'. The 'src.' prefix creates a separate module singleton."
[tool.black]
line-length = 100
target-version = ['py310']
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
markers = [
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
]