[build-system]
requires = ["setuptools>=68.0", "wheel", "setuptools-scm"]
build-backend = "setuptools.build_meta"
[project]
name = "mcp-crypto-data-server"
version = "0.1.0"
description = "Production-grade Python MCP server for real-time and historical cryptocurrency market data"
readme = "README.md"
requires-python = ">=3.11"
license = {text = "MIT"}
authors = [
{name = "MCP Team", email = "team@example.com"}
]
packages = [{include = "app"}]
dependencies = [
"fastapi>=0.104.0",
"uvicorn[standard]>=0.24.0",
"pydantic>=2.0.0",
"pydantic-settings>=2.0.0",
"ccxt>=4.0.0",
"httpx>=0.25.0",
"redis>=5.0.0",
"python-dotenv>=1.0.0",
"python-json-logger>=2.0.0",
]
[project.optional-dependencies]
dev = [
"pytest>=7.4.0",
"pytest-asyncio>=0.21.0",
"pytest-cov>=4.1.0",
"pytest-mock>=3.11.0",
"respx>=0.20.0",
"httpx-mock>=0.30.0",
"ruff>=0.1.0",
"black>=23.0.0",
]
[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
addopts = "--cov=app --cov-report=term-missing --cov-report=html --cov-fail-under=90"
python_files = ["test_*.py", "*_test.py"]
markers = [
"unit: unit tests",
"integration: integration tests",
"slow: slow tests",
]
[tool.coverage.run]
source = ["app"]
omit = [
"app/__init__.py",
"app/utils/logging_config.py",
]
[tool.coverage.report]
exclude_lines = [
"pragma: no cover",
"def __repr__",
"raise AssertionError",
"raise NotImplementedError",
"if __name__ == .__main__.:",
"if TYPE_CHECKING:",
]
[tool.ruff]
line-length = 100
target-version = "py311"
select = ["E", "F", "W", "I", "N", "UP", "B", "A", "C4", "PIE", "PT", "RUF"]
ignore = ["E501", "W503"]
[tool.ruff.isort]
known-first-party = ["app"]
[tool.black]
line-length = 100
target-version = ["py311"]
include = '\.pyi?$'
exclude = '''
/(
\.git
| \.hg
| \.mypy_cache
| \.tox
| \.venv
| _build
| buck-out
| build
| dist
)/
'''