[project] name = "mcrentcast" version = "0.1.0" description = "MCP Server for Rentcast API with intelligent caching and rate limiting" authors = [ {name = "Your Name", email = "your.email@example.com"} ] readme = "README.md" license = {text = "MIT"} requires-python = ">=3.13" classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.13", ] dependencies = [ "fastmcp>=2.12.2", "pydantic>=2.11.7", "httpx>=0.27.0", "sqlalchemy>=2.0.43", "python-dotenv>=1.0.0", "aiofiles>=24.1.0", "structlog>=24.4.0", "tenacity>=8.2.3", "typing-extensions>=4.12.0", ] [dependency-groups] dev = [ "pytest>=8.4.0", "pytest-asyncio>=1.1.0", "pytest-html>=4.1.0", "pytest-cov>=4.0.0", "ruff>=0.1.0", "watchfiles>=0.21.0", "black>=24.0.0", "mypy>=1.8.0", ] [project.urls] Homepage = "https://github.com/your-username/mcrentcast" Repository = "https://github.com/your-username/mcrentcast.git" Documentation = "https://github.com/your-username/mcrentcast#readme" [project.scripts] mcrentcast = "mcrentcast.server:main" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.ruff] target-version = "py313" line-length = 88 select = [ "E", # pycodestyle errors "W", # pycodestyle warnings "F", # pyflakes "I", # isort "B", # flake8-bugbear "C4", # flake8-comprehensions "UP", # pyupgrade ] ignore = [ "E501", # line too long, handled by black "B008", # do not perform function calls in argument defaults "C901", # too complex ] [tool.ruff.per-file-ignores] "__init__.py" = ["F401"] [tool.black] line-length = 88 target-version = ['py313'] include = '\.pyi?$' extend-exclude = ''' /( # directories \.eggs | \.git | \.hg | \.mypy_cache | \.tox | \.venv | build | dist )/ ''' [tool.mypy] python_version = "3.13" warn_return_any = true warn_unused_configs = true disallow_untyped_defs = true disallow_incomplete_defs = true check_untyped_defs = true disallow_untyped_decorators = true no_implicit_optional = true warn_redundant_casts = true warn_unused_ignores = true warn_no_return = true warn_unreachable = true strict_equality = true [tool.pytest.ini_options] addopts = [ "-v", "--tb=short", "--html=reports/test_report.html", "--self-contained-html", "--cov=src", "--cov-report=html:reports/coverage_html", "--capture=no", "--log-cli-level=INFO", "--log-cli-format=%(asctime)s [%(levelname)8s] %(name)s: %(message)s", "--log-cli-date-format=%Y-%m-%d %H:%M:%S" ] testpaths = ["tests"] markers = [ "unit: Unit tests", "integration: Integration tests", "smoke: Smoke tests for basic functionality", "performance: Performance and benchmarking tests", "api: Rentcast API integration tests", ]