[project] name = "monarch-mcp-jamiew" version = "0.4.0" description = "MCP server for Monarch Money personal finance" readme = "README.md" requires-python = ">=3.10" license = { text = "MIT" } authors = [ { name = "Jamie Dubs", email = "jamie@jamiedubs.com" }, ] keywords = [ "mcp", "model-context-protocol", "monarch-money", "finance", "budgeting", "personal-finance", ] classifiers = [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Office/Business :: Financial", ] dependencies = [ "mcp[cli]>=1.30.0,<2", "monarchmoneycommunity>=1.5.2", "pydantic>=2.13.5", "python-dateutil>=2.9.0.post0", "structlog>=26.1.0", ] [project.urls] Homepage = "https://github.com/jamiew/monarch-mcp" Repository = "https://github.com/jamiew/monarch-mcp" Issues = "https://github.com/jamiew/monarch-mcp/issues" [project.scripts] monarch-mcp-jamiew = "server:run" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] only-include = ["server.py"] [tool.hatch.build.targets.sdist] only-include = [ "server.py", "README.md", "LICENSE", "pyproject.toml", ] [dependency-groups] dev = [ "mypy>=2.3.1", "pytest>=9.0.0", "pytest-asyncio>=1.3.0", "pytest-cov>=7.0.0", "ruff>=0.16.7", "types-python-dateutil>=2.9.0.20260807", ] [tool.mypy] python_version = "3.10" warn_return_any = true warn_unused_configs = true disallow_untyped_defs = true disallow_incomplete_defs = true check_untyped_defs = true no_implicit_optional = true strict_optional = true warn_redundant_casts = true warn_unused_ignores = true show_error_codes = true ignore_missing_imports = true # Untyped SDK decorators and defensive runtime checks need these exceptions. disable_error_code = ["misc", "unreachable", "untyped-decorator"] [tool.pytest.ini_options] testpaths = ["tests"] python_files = ["test_*.py", "*_test.py"] python_classes = ["Test*"] python_functions = ["test_*"] addopts = ["-v", "--tb=short", "--strict-markers"] asyncio_mode = "auto" markers = [ "unit: Unit tests", "integration: Integration tests", "slow: Slow running tests" ] [tool.ruff] target-version = "py310" line-length = 120 [tool.ruff.lint] select = [ "E", # pycodestyle errors "W", # pycodestyle warnings "F", # pyflakes "I", # isort "B", # flake8-bugbear "C4", # flake8-comprehensions "UP", # pyupgrade "SIM", # flake8-simplify ] ignore = [ "E501", # line too long (handled by formatter) "B008", # allow framework defaults "SIM108", # use ternary operator instead of if-else "E402", # allow conditional imports ] [tool.ruff.lint.per-file-ignores] "tests/*" = [ "F841", # unused variables (often intentional in mocks) "SIM117", # multiple with statements (clearer in tests) ] "scripts/*" = [ "F841", # unused variables (often for side effects) ] [tool.ruff.lint.isort] known-first-party = ["server"] [tool.ruff.format] quote-style = "double" indent-style = "space" skip-magic-trailing-comma = false [tool.coverage.run] source = ["."] omit = ["tests/*", ".venv/*"] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "if __name__ == .__main__.:", "raise NotImplementedError", ] [tool.uv.sources] # Exact dev HEAD, checked 2026-09-14. See the fork assessment in CLAUDE.md. monarchmoneycommunity = { git = "https://github.com/bradleyseanf/monarchmoneycommunity", rev = "c2f91f14f3d962d36275cb934dd3594b8aa1dcad" }