[build-system]
requires = ["setuptools>=64", "setuptools-scm>=8", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "justifi-mcp-server"
dynamic = ["version"]
description = "JustiFi MCP Server with multi-framework support for payment processing integration"
authors = [{ name = "JustiFi MCP Team", email = "support@justifi.ai" }]
license = "MIT"
requires-python = ">=3.11"
dependencies = [
    "mcp",
    "fastmcp",
    "httpx",
    "pydantic>=2.0.0",
    "python-dotenv",
    "langsmith",
    "starlette",
    "uvicorn",
]
keywords = [
    "mcp",
    "model-context-protocol",
    "justifi",
    "payments",
    "ai",
    "langchain",
    "openai",
    "agent-toolkit",
]
classifiers = [
    "Development Status :: 4 - Beta",
    "Intended Audience :: Developers",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Topic :: Software Development :: Libraries :: Python Modules",
    "Topic :: Office/Business :: Financial",
]

[project.urls]
Homepage = "https://github.com/justifi-tech/mcp-servers"
Documentation = "https://docs.justifi.ai/mcp"
Repository = "https://github.com/justifi-tech/mcp-servers"
Issues = "https://github.com/justifi-tech/mcp-servers/issues"

[project.scripts]
justifi-mcp-server = "modelcontextprotocol.main:cli_main"

# Development dependencies
[project.optional-dependencies]
dev = [
    "pytest>=7.0.0",
    "pytest-asyncio>=0.21.0",
    "pytest-cov>=4.0.0",
    "respx>=0.20.0",
    "ruff>=0.1.0",
    "setuptools-scm>=8.0.0",  # For version management
    "watchdog",               # Only for development auto-restart
    # Note: mypy excluded from standard workflow - focus on runtime correctness
    # "mypy>=1.0.0",
]
test = ["pytest", "pytest-asyncio", "pytest-cov", "respx"]
api = ["requests", "pyyaml", "deepdiff"]
docs = ["mkdocs", "mkdocs-material", "mkdocs-mermaid2-plugin"]
all = [
    # Include all dependencies from other extras
    "pytest",
    "pytest-asyncio",
    "pytest-cov",
    "respx",
    "black",
    "ruff",
    "mypy",
    "watchdog",
    "pre-commit",
    "types-requests",
    "types-PyYAML",
    "langchain-core",
    "langchain-openai",
    "requests",
    "pyyaml",
    "deepdiff",
    "mkdocs",
    "mkdocs-material",
    "mkdocs-mermaid2-plugin",
]

[tool.black]
line-length = 88
target-version = ['py311']

[tool.ruff]
line-length = 88
target-version = "py311"

# Exclude auto-generated files from linting
exclude = [
    "python/_version.py", # Auto-generated by setuptools-scm
]

[tool.ruff.lint]
# Essential rules for code quality
select = [
    "E",  # pycodestyle errors
    "W",  # pycodestyle warnings
    "F",  # Pyflakes
    "I",  # isort
    "B",  # flake8-bugbear
    "UP", # pyupgrade
]
ignore = [
    "E501", # line too long, handled by black
]

[tool.ruff.lint.isort]
known-first-party = ["python", "modelcontextprotocol", "tests"]

[tool.setuptools.packages.find]
where = ["."]
include = ["python*", "modelcontextprotocol*"]
exclude = ["tests*", "archive*", "eval*", "examples*", "scripts*"]

[tool.setuptools_scm]
write_to = "python/_version.py"
fallback_version = "0.0.0"
