[project]
name = "updation-mcp-local"
version = "1.0.0"
description = "Production-grade MCP server for Updation with LLM-agnostic architecture"
readme = "README.md"
requires-python = ">=3.11"
authors = [
{ name = "Updation Team" }
]
dependencies = [
# Core MCP
"mcp[cli]>=1.13.1",
# Web Framework
"fastapi>=0.115.0",
"uvicorn[standard]>=0.32.0",
"python-multipart>=0.0.20",
# LLM Providers (all supported)
"openai>=1.54.0",
"anthropic>=0.39.0",
"google-generativeai>=0.8.3",
# HTTP Clients
"httpx>=0.28.0",
"aiohttp>=3.11.0",
# Data Validation & Serialization
"pydantic>=2.10.0",
"pydantic-settings>=2.6.0",
# Redis for distributed state
"redis>=5.2.0",
"hiredis>=3.0.0",
# Observability
"structlog>=24.4.0",
"prometheus-client>=0.21.0",
"sentry-sdk[fastapi]>=2.18.0",
# Resilience
"tenacity>=9.0.0",
"circuitbreaker>=2.0.0",
# Rate Limiting
"slowapi>=0.1.9",
# Environment Management
"python-dotenv>=1.0.1",
# Utilities
"backoff>=2.2.1",
"python-json-logger>=3.2.1",
]
[project.optional-dependencies]
dev = [
"pytest>=8.3.0",
"pytest-asyncio>=0.24.0",
"pytest-cov>=6.0.0",
"pytest-mock>=3.14.0",
"httpx>=0.28.0",
"faker>=33.0.0",
"ruff>=0.8.0",
"mypy>=1.13.0",
]
[tool.ruff]
line-length = 120
target-version = "py311"
[tool.ruff.lint]
select = ["E", "F", "I", "N", "W", "UP"]
ignore = ["E501"]
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
[tool.mypy]
python_version = "3.11"
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = false